Предположим, что TCP-сокет на локальном хосте Linux находится в состоянии соединения с удаленным хостом. Локальный хост использует epoll_wait для уведомления о событиях в сокете с удаленным хостом.
Если удаленный хост должен был вызвать:
shutdown(s,SHUT_WR);
на своем подключенном сокете, чтобы указать, что передача завершена, какие события epoll_wait вернет на локальном хосте для своего сокета?
Я предполагаю, что EPOLLIN сделает это. всегда возвращаются, и последующий вызов recv вернет 0, чтобы указать, что удаленная сторона закончила передачу.
А как насчет EPOLLHUP или EPOLLRDHUP? (И в чем разница между этими двумя событиями)?
Или даже EPOLLERR?
Если удаленный хост вызывает «закрыть» вместо «выключение», изменится ли ответ на любой из вышеперечисленных?