当前位置: 技术问答>linux和unix
Epoll文件描述符耗尽的问题,折磨了好几天了
来源: 互联网 发布时间:2016-07-04
本文导语: Epoll的LT模式,如果没有明确close socket的话,开始还比较正常,但是fd会一直耗尽到1024 后来我把代码改成回送的时候送完我就把socket给colse了,但是有时候系统繁忙,又不能顺利地把回送(send)数据送出去,马上close...
Epoll的LT模式,如果没有明确close socket的话,开始还比较正常,但是fd会一直耗尽到1024
后来我把代码改成回送的时候送完我就把socket给colse了,但是有时候系统繁忙,又不能顺利地把回送(send)数据送出去,马上close的话会造成数据丢失。有什么办法能够高效地回送数据,但是又不会造成fd耗尽?
另外linux是不是一定得自己close 套接字?
后来我把代码改成回送的时候送完我就把socket给colse了,但是有时候系统繁忙,又不能顺利地把回送(send)数据送出去,马上close的话会造成数据丢失。有什么办法能够高效地回送数据,但是又不会造成fd耗尽?
另外linux是不是一定得自己close 套接字?
|
linux 肯定是要手动close(fd)的。 其次,可以查一下linger 这个套接字选项。它决定了在关闭套接字前,输出缓冲区里数据滞留的时间长短。
|
这个以前倒没没遇到过,关注一下。
以前都是send成功返回后马上close socket,一直没发现有什么问题。
实在不行的话,那就先不要关闭socket,而是让对方在收完消息后先close,然后你在epoll中增加对EPOLLRDHUP事件的监听,监听到对方关闭socket之后你这边再close。
只是这样你需要小心在等待关闭的这段时间里,别在这个socket收发其它消息了。
以前都是send成功返回后马上close socket,一直没发现有什么问题。
实在不行的话,那就先不要关闭socket,而是让对方在收完消息后先close,然后你在epoll中增加对EPOLLRDHUP事件的监听,监听到对方关闭socket之后你这边再close。
只是这样你需要小心在等待关闭的这段时间里,别在这个socket收发其它消息了。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。