Сокет: клиент был отключен или нет? - PullRequest
1 голос
/ 27 ноября 2009

Я создаю сервер сокетов. Но я не знаю, как я могу узнать, клиент отключен или нет? Я создаю сервер под Windows и использую функцию сокетов Беркли (чтение, отправка, подключение ....). Желательно кросс-платфоменное решение (без функций WSA).

Я могу записать в сокет 0 байт и ошибка ckeck. Но это не хорошее решение.

1 Ответ

4 голосов
/ 27 ноября 2009

Когда клиент отключается, вы получите событие «чтение», но read () вернет 0.

ssize_t bytes_read;
if ((bytes_read = read(...)) == 0)
{
    // client disconnected
}
else if (bytes_read == -1)
{
    // some sort of error (also no data available when using non-blocking sockets).
}
else
{
    // you have bytes_reads bytes to process
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...