Как использовать EPOLLHUP

не могли бы вы, ребята, предоставить мне хороший пример кода, используя EPOLLHUP для обработки мертвых сверстников? Я знаю, что это сигнал для обнаружения отсоединения пользователя, но не уверен, как я могу использовать это в коде..Спасибо заранее..

1 ответов


вы используете EPOLLRDHUP для обнаружения однорангового выключения, а не EPOLLHUP (что сигнализирует о неожиданном закрытии сокета, т. е. обычно о внутренней ошибке).

использование его очень просто, просто " или " флаг с любыми другими флагами, которые вы даете epoll_ctl. Так, например, вместо EPOLLIN написать EPOLLIN|EPOLLRDHUP.

после epoll_wait, не if(my_event.events & EPOLLRDHUP) затем, что вы хотите сделать, если другая сторона закрыла соединение (вы, вероятно, хотите, чтобы закрыть розетка.)

обратите внимание, что получение результата "чтение нулевых байтов" при чтении из сокета и означает, что другой конец отключил соединение, поэтому вы всегда должны проверять это, чтобы избежать неприятных сюрпризов (FIN может прибыть после вы проснулись от EPOLLIN но до вы называете read, если вы находитесь в режиме ET, вы не получите другого уведомления).