Как использовать EPOLLHUP
не могли бы вы, ребята, предоставить мне хороший пример кода, используя EPOLLHUP для обработки мертвых сверстников? Я знаю, что это сигнал для обнаружения отсоединения пользователя, но не уверен, как я могу использовать это в коде..Спасибо заранее..
1 ответов
вы используете EPOLLRDHUP
для обнаружения однорангового выключения, а не EPOLLHUP
(что сигнализирует о неожиданном закрытии сокета, т. е. обычно о внутренней ошибке).
использование его очень просто, просто " или " флаг с любыми другими флагами, которые вы даете epoll_ctl
. Так, например, вместо EPOLLIN
написать EPOLLIN|EPOLLRDHUP
.
после epoll_wait
, не if(my_event.events & EPOLLRDHUP)
затем, что вы хотите сделать, если другая сторона закрыла соединение (вы, вероятно, хотите, чтобы закрыть розетка.)
обратите внимание, что получение результата "чтение нулевых байтов" при чтении из сокета и означает, что другой конец отключил соединение, поэтому вы всегда должны проверять это, чтобы избежать неприятных сюрпризов (FIN
может прибыть после вы проснулись от EPOLLIN
но до вы называете read
, если вы находитесь в режиме ET, вы не получите другого уведомления).