当前位置:  技术问答>linux和unix

epoll,socket超时如何设置?

    来源: 互联网  发布时间:2017-02-23

    本文导语:  在我的设计模型中,用到了传说中的epoll,原来的方式是阻塞式的一个线程一个socket,在recv的时候设置recv的超时,如果超时,就将socket断掉,认为接收不成功。 现在改为epoll,非阻塞式的,在epoll_wait返回的fd中,一...

在我的设计模型中,用到了传说中的epoll,原来的方式是阻塞式的一个线程一个socket,在recv的时候设置recv的超时,如果超时,就将socket断掉,认为接收不成功。
现在改为epoll,非阻塞式的,在epoll_wait返回的fd中,一旦在recv任何一个fd的时候返回非0的error时,立即将从socket收到的数据放入cache list中,等待epoll_wait再次返回fd的时候,先从cahe list中查找fd存在这个list中没,如果没有就从包头开始接收,如果有,就继续上次接收的地方开始。send发消息到客户端的时候也是如此这般
但是现在遇到一个问题,我应该在哪里设置socket接收的超时,或者send的超时,因为现在recv和send没有timeout了
我该从哪里设置。或者说我在等客户端的socket发送一个指定消息的时候在timeout之内没收到,如何主动断开socket

|
1,设置socket非阻塞
2,设置epoll_wait超时1秒
3,每次进入epoll_wait之前,遍历在线用户列表,踢出长时间没有请求的用户.

PS:每次用户发来数据, read之后更新该用户last_request时间, 为了上面的步骤3而做.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux epoll的ET模式和LT模式的主要区别是什么呢?为什么ET模式一定要用非阻塞socket?
  • socket关闭是是否需要从epoll里面移出
  • epoll中epoll_event结构体的含义
  • epoll_ctl(,EPOLL_CTL_DEL,); 的问题!!!
  • 第一次用epoll就傻眼,程序报create_epoll error Function not implemented
  • 为Qt添加epoll的高性能I/O复用 qt_eventdispatcher_epoll
  • 请问: 当服务器采用epoll 时,客户端连不上,但若服务器端不用epoll时,也连上并发消息,这是为什么啊
  • epoll_ctl(epfd, EPOLL_CTL_ADD, fd, &event)为何老返回-1
  • epoll 退出
  • 关于epoll的几个疑问
  • 大家好,问个问题,关于EPOLL的。。。
  • epoll并发问题
  • 有人碰到过epoll丢信号吗
  • epoll异常问题
  • epoll模型如何限制最大连接数
  • epoll可读的问题
  • python实现Linux异步epoll代码
  • epoll多路复用模型的疑惑,请高手解答
  • epoll的一个问题
  • linux并发服务器中epoll+多线程分别怎么理解?
  • 关于epoll的链接库
  • 谁能解释一下epoll、libevent、zeroMQ的区别?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3