Вы все еще можете использовать epoll и использовать аргумент timeout в epoll_wait для определения времени ожидания.
Если у вас есть сеанс TCP и вы хотите определить, когда удаленный узел закрывает соединение, которое вы зарегистрировали, чтобы получить событие EPOLLRDHUP
, или вы можете обнаружить его, получив errno == EAGAIN
при получении события EPOLLIN
и попытке читать (не блокируя) из закрытого сокета.