如何实现epoll超时?

cod*_*ons 3 linux networking epoll

我正在使用epoll进行网络编程.好像工作正常.我想添加一个超时功能,所以如果客户端长时间没有发送任何东西,那么它只会断开客户端.

我该怎么做呢?我知道我可以在epoll_wait中设置超时但这不适用于单个套接字......

提前致谢...

caf*_*caf 9

保留一个按剩余时间排序的套接字列表,直到它们超时(如果所有套接字的超时时间相同,那么这相当于按最后收到的消息的时间对它们进行排序).每次拨打电话时epoll_wait(),请选择剩余时间最短的套接字,直到超时(位于列表的前面).将该时间用作超时时间epoll_wait().

epoll_wait()返回时,处理任何活动插座后,经过修剪的插座全部已过期的排序列表(这将在排序列表的开始).


epoll_wait()时间:

timeout = expirylist->expire_time - current_time();
n_events = epoll_wait(epfd, events, maxevents, timeout);

handle_events(events, n_events);

for (client = expirylist; client != NULL && client->expire_time < current_time(); client = client->expire_next)
{
    do_timeout(client);
}
Run Code Online (Sandbox Code Playgroud)