Похоже, вам удалось наполовину закрыть соединение со стороны клиента.В этом состоянии соединение все еще может отправлять данные в одном направлении, то есть оно работает в полудуплексном режиме.Это сделано специально и позволит вашему серверу завершить ответ на все отправленные клиентом сообщения.Как правило, это будет означать завершение передачи файла и вызов close()
, или ответ на все аспекты запроса. В полузакрытом состоянии вы все еще вполне разумно можете отправлять данные на сторону, которая уже назвала close()
.На вашем сервере вы увидите eof, если попытаетесь прочитать хотя.close()
просто означает «Я закончил отправку, завершите все, что я просил».
POLLHUP
, POLLERR
и POLLNVAL
проверяет только выходную сторону локального соединения, которая по-прежнемудействует здесь.Существует POLLRDHUP
, который является расширением GNU, который должен обнаруживать закрытие другой стороны, но тесты, которые вы выполняете, проверяют только, доступны ли они для записи, а не для чтения.
См. Также этот вопрос , который говорит о Java, но все еще очень связан.