当前位置: 技术问答>linux和unix
close掉socket后,在accept了1024次后,出现打开文件最大限制1024的问题
来源: 互联网 发布时间:2016-02-17
本文导语: 我的一个服务器程序在循环accept来自客户端的连接, 建立连接,处理完该处理的事情后,close掉该socket, 当accept到1024次后,无法再accept连接了。 通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一...
我的一个服务器程序在循环accept来自客户端的连接,
建立连接,处理完该处理的事情后,close掉该socket,
当accept到1024次后,无法再accept连接了。
通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一直不关机,总会有一天打开到最大限制的
我觉得可能还是close的问题,但不知道原因在哪里?
建立连接,处理完该处理的事情后,close掉该socket,
当accept到1024次后,无法再accept连接了。
通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一直不关机,总会有一天打开到最大限制的
我觉得可能还是close的问题,但不知道原因在哪里?
|
你是根据什么条件close()的呢
是server主动关闭还是客户端关闭你才关闭
如果是server主动关闭,这个tcp connection将处于TIME_AWAIT状态,在这个时间内不会马上close(),所以还占用文件描述符位置
建议你netstat -an | grep port 看看connection 的状态
是server主动关闭还是客户端关闭你才关闭
如果是server主动关闭,这个tcp connection将处于TIME_AWAIT状态,在这个时间内不会马上close(),所以还占用文件描述符位置
建议你netstat -an | grep port 看看connection 的状态
|
还是怀疑没有正确close
|
client_sock = accept( server_sock,...);
...
close(client_sock);
...中有没有异常的continue,而没有close
...
close(client_sock);
...中有没有异常的continue,而没有close
|
服务器一般不主动close掉连接,而是由client发起close,服务器响应close。
除非client出现错误或问题(包括client发起close)。
这是写服务器的基本原则。
除非client出现错误或问题(包括client发起close)。
这是写服务器的基本原则。
|
这样做不好,兄弟
先用select看是否有可读取数据,若>0则再运行accept
先用select看是否有可读取数据,若>0则再运行accept
|
进入/proc/pid/fd内,ls -l看看都是那些没关闭就是了。(pid问进程号)
|
gdb一下,看看是否有调close(),估计没有运行到close()就跳出循环
|
大量的socket连接建议用epoll! 简单适用
|
close后看看端口状态.确认下客户端是不是也close了?
|
服务器的ram有多大?还有好像linux默认最大连接数是1024,要彻底修改连接数,得重新编译内核/include/linux/fs.h
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。