2012-03-17 2 views
2

Я использую epoll как уровень срабатывания. Согласно recv(3), если recv возвращает 0 «сообщения не доступны, и сверстник выполнил упорядоченное завершение». Означает ли это, что весь запрос получен, а розетка закрыта с другой стороны? Что розетка была закрыта на обоих концах? Или это просто весь запрос был получен, и сокет ожидает ответа на его запись? Любая помощь будет принята с благодарностью.epoll recv return value

Согласно What value will recv() return, похоже, что если recv возвращает 0, соединение закрывается с другой стороны. Если это так, что нужно делать на стороне epoll? Должен ли сокет быть полностью удален с вызовом на epoll_ctl с EPOLL_CTL_DEL и позвонить по телефону close?

ответ

4

Это означает, что вы уже прочитали все данные, которые были отправлены через соединение, и остается только TCP FIN, что может быть результатом полного закрытия удаленного или выключения для вывода на пульт дистанционного управления. Вы не можете много сделать, но закрываете сокет в этот момент, если только вы не знаете, что одноранговый узел имеет только выключение, и в этом случае вы все равно можете записать в сокет. Ваш протокол приложения определяет все это.

В TCP нет такой вещи, как запрос или ответ. Существует только двунаправленный байт-поток.