С возвращением с вопросом C сокетов.Использование recv для приема входящего массива char
Я пытаюсь получить массив символов от клиента через TCP. У меня есть следующий ПРИЕМ код:
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, пока я не получу данные из входящего сокета? Как я должен отказаться от нежелательных символов в буфере, т. Е. Удалить символы, полученные с первой итерации.
Большое спасибо!
- редактировать ---
Привет всем, Я приложил консольный вывод из затмения.
**... <- 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 должен был блокироваться, пока он не получит байты?
recv блокирует до тех пор, пока не будет символов, поэтому в буфере нет «нежелательных» символов - независимо от возвращаемого значения (recvBytes) - количество символов в буфере – KevinDTimm
@KevinDTimm: если 'setsockopt' используется для установки сокет в неблокирующий режим. –
Если ОП опубликует больше информации, мы могли бы дать более качественные ответы (IOW, качество ответа равно качеству вопроса) – KevinDTimm