epoll recv возвращаемое значение - PullRequest
2 голосов
/ 17 марта 2012

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

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

1 Ответ

4 голосов
/ 17 марта 2012

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

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

...