我们有一个单线程服务器,该服务器使用epoll
检测现有套接字连接上的新连接和传入数据。一切正常。
但是,我们不想保持理想的连接。如果在10秒内未收到任何数据,我们想断开连接。
epoll
中是否有办法,如果一段时间内未接收到数据,则会生成事件。您可以推荐其他任何方式。请注意,服务器必须是单线程的,并且套接字的数量很大(10-20K)。
通过超时并检查返回值。如果它为零,则int epoll_wait(int epfd, struct epoll_event *events, int maxevents, int timeout);
说明
timeout参数指定了毫秒数
epoll_wait()
将被阻止。时间是根据CLOCK_MONOTONIC
时钟。通话将一直阻塞,直到以下任何一个:
- 文件描述符传递事件;
- 呼叫被信号处理程序中断;或
- 超时到期。
返回值
成功后,
epoll_wait()
返回为请求的I / O准备的文件描述符的数量;如果在请求的[[timeout毫秒内没有文件描述符准备就绪,则返回零。发生错误时,epoll_wait()
返回-1,并且errno设置正确。
epoll_wait()
超时。