Я вернулся с вопросом о розетках C.
Я пытаюсь получить массив символов от клиента через TCP. У меня есть следующий recv код:
char buffer[2048];
int recvBytes = 0;
while (1) {
if ((clntSockfd = accept(servSockfd, (struct sockaddr *) &clntAddr, &clntSockAddrLen)) == -1) {
printf("Unable to accept client connection\n");
exit(1);
}
else {
printf("Client connection accepted!\n");
}
/* clear buffer */
memset(buffer, 0, sizeof(buffer));
recvBytes = recv (clntSockfd, buffer, sizeof(buffer), 0);
printf("Bytes received: %i\n", recvBytes);
printf("Char array received: %s\n", buffer);
}
Я заметил, что при выполнении recvBytes показывает ноль в первой итерации. Только после второй итерации он получает входящий массив символов.
Я хотел бы узнать, будет ли блокироваться recv, пока я не получу данные из входящего сокета? Как я должен отбросить ненужные символы в буфере - то есть отбросить символы, полученные с первой итерации.
Большое спасибо!
- редактировать ---
Привет всем, я добавил консольный вывод из eclipse.
**... <- initialization stuff
Binding socket to port
Socket binded
Start listening on port 8081.
Client connection accepted! *while loop - first iteration
Bytes received: 0 *while loop - first iteration
Char array received: *while loop - first iteration
Client connection accepted! *while loop - second iteration
Bytes received: 22 *while loop - second iteration
Char array received: 1~Message~HowAreYou? *while loop - second iteration**
Надеюсь, вышеприведенный вывод консоли проиллюстрирует мои вопросы относительно первой и второй итераций Исходя из вышесказанного, первая итерация не получает байтов, но recv не блокирует. Я думал, что recv должен был блокировать, пока не получит байты?