Я учусь работать с сокетами в c. Вот мой код:Recv call get empty data
void work_with_client(int client_sock){
char buff[10] = {0};
while(1){
kv_log_message("\tWork with client\n");
int is_received = recv(client_sock, buff, 10, 0);
if(is_received < 0){
perror("Received failed");
} else {
printf("RESPONSE: %s\n", buff);
}
printf("RESPONSE %d\n", is_received);
sleep(1);
}
}
При подключении через Telnet к этому серверу и немедленно отключить сервер печати этой строки:
Work with client
RESPONSE:
RESPONSE 10
Work with client
RESPONSE:
RESPONSE 10
Work with client
RESPONSE:
RESPONSE 10
Work with client
RESPONSE:
RESPONSE 10
Work with client
RESPONSE:
RESPONSE 1
Work with client
RESPONSE:
RESPONSE 0
Work with client
И я не понимаю, почему первые 4 recv
звонки получить полный размер данных буфера (я ничего не пишу в сокет с точки зрения клиента). Любые предложения? P.S. Запуск на Mac OS X Yosemite
UPDATE: я проверить свою программу на Linux, и RECV вызов всегда возвращает 0, в моем случае, так вероятно, проблема в телнет на Mac OS X
Yeap, но как насчет первых 4 вызовов recv, которые возвращают значение '10', хотя клиент уже закрывает соединение – kirugan
Может быть, Telnet отправил некоторые вещи для переговоров. –
Ваше обновление не разрешает проблему, теперь оно показывает мне значение '9' вместо' 10' =) – kirugan