Проверьте, отключен ли сокет в C, без select () - PullRequest
0 голосов
/ 23 мая 2009

Есть ли способ проверить, отсоединился ли сокет на удаленном конце без select () в C?

Причина, по которой я не хочу использовать select (), состоит в том, что в случае, если мои буферы заполнены, могут быть данные, доступные для чтения на сокете, которые я намеренно игнорирую, и выбор (readfds = [socket_fd] ) всегда возвращался, немедленно давая мне знать.

Ответы [ 2 ]

4 голосов
/ 23 мая 2009

Если у вас есть блокирующий вызов read () для сокета, и он возвращает целочисленное значение 0, это означает, что соединение с сокетом закрыто.

while ( n = read(sockfd, buffer, BUFFER_SIZE) ) {
     //use buffer contents
}

Этот цикл будет продолжаться, пока данные отправляются с другого конца.

1 голос
/ 23 мая 2009

Так что вместо этого используйте poll(), установив events на то, что вам нужно, и проверив результаты в revents. К вашему сведению, вы можете позвонить select() или poll(), не повредив сокетов и не изменив их буферы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...