社区
Linux/Unix社区
帖子详情
close掉socket后,在accept了1024次后,出现打开文件最大限制1024的问题
tang_go
2007-10-19 05:27:48
我的一个服务器程序在循环accept来自客户端的连接,
建立连接,处理完该处理的事情后,close掉该socket,
当accept到1024次后,无法再accept连接了。
通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一直不关机,总会有一天打开到最大限制的
我觉得可能还是close的问题,但不知道原因在哪里?
...全文
595
15
打赏
收藏
close掉socket后,在accept了1024次后,出现打开文件最大限制1024的问题
我的一个服务器程序在循环accept来自客户端的连接, 建立连接,处理完该处理的事情后,close掉该socket, 当accept到1024次后,无法再accept连接了。 通过ulimit -n,sysctl来修改最大限制也意义不大,这是服务器啊,一直不关机,总会有一天打开到最大限制的 我觉得可能还是close的问题,但不知道原因在哪里?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
15 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
daidodo
2007-11-07
打赏
举报
回复
服务器一般不主动close掉连接,而是由client发起close,服务器响应close。
除非client出现错误或问题(包括client发起close)。
这是写服务器的基本原则。
mymtom
2007-10-25
打赏
举报
回复
还是怀疑没有正确close
mymtom
2007-10-25
打赏
举报
回复
如果是server主动关闭,这个tcp connection将处于TIME_AWAIT状态,在这个时间内不会马上close(),所以还占用文件描述符位置
====
还占用文件描述符么?有点怀疑,没有试验过,这几天太忙,有时间试验一下!
lauxp
2007-10-25
打赏
举报
回复
你是根据什么条件close()的呢
是server主动关闭还是客户端关闭你才关闭
如果是server主动关闭,这个tcp connection将处于TIME_AWAIT状态,在这个时间内不会马上close(),所以还占用文件描述符位置
建议你netstat -an | grep port 看看connection 的状态
mymtom
2007-10-24
打赏
举报
回复
楼主可否把代码贴上来?
pinelinda
2007-10-23
打赏
举报
回复
client_sock = accept( server_sock,...);
...
close(client_sock);
...中有没有异常的continue,而没有close
t_mac_chen
2007-10-22
打赏
举报
回复
服务器的ram有多大?还有好像linux默认最大连接数是1024,要彻底修改连接数,得重新编译内核/include/linux/fs.h
tang_go
2007-10-22
打赏
举报
回复
确定调用了close()
我每次在调用close()之前打印了client_sock,
从1变到1023,之后就死掉了
NC
2007-10-22
打赏
举报
回复
close后看看端口状态.确认下客户端是不是也close了?
hilary0810
2007-10-20
打赏
举报
回复
这样做不好,兄弟
先用select看是否有可读取数据,若>0则再运行accept
tengulre
2007-10-20
打赏
举报
回复
大量的socket连接建议用epoll! 简单适用
chairou
2007-10-20
打赏
举报
回复
gdb一下,看看是否有调close(),估计没有运行到close()就跳出循环
tang_go
2007-10-20
打赏
举报
回复
重点不在accept,是在close后,socket资源为什么不释放呢?
cceczjxy
2007-10-20
打赏
举报
回复
进入/proc/pid/fd内,ls -l看看都是那些没关闭就是了。(pid问进程号)
tang_go
2007-10-19
打赏
举报
回复
程序结构是这样的:
listen(server_sock,...)
while(1)
{
client_sock = accept( server_sock,...);
...
close(client_sock);
}
client_sock到1023之后,再也连接不了,报错:Too many open files
我可以肯定,在循环体里,绝对释放了所有打开的文件句柄
java报文件打开数过多_Tomcat报java.io.IOException: 打开的文件过多
2.java的垃圾回收不能关闭网络连接打开的文件句柄,如果没有执行
close
()(例如:java.net.
Socket
.
close
())则文件句柄将一直存在,而不能被关闭.你也可以考虑设置
socket
的
最大
打开数来控制这个
问题
.操作系统的中
打开文件
的
最大
句柄数受限所致,常常发生在很多个并发用户访问服务器的时候.因为为了执行每个用户的应用服务器都要加载很多文件(new一个
socket
就需要一个文件句柄),这就会导致
打开文件
的句柄的缺乏.文件打开数过多最坏的情况可以使系统崩溃,到时候只能是重起服务器了。
Linux下
CLOSE
-WAIT过多分析与解决
查看链接状态 netstat -ant|awk '/^tcp/ {++S[$NF]} END {for(a in S) print (a,S[a])}' 情景描述:系统产生大量“Too many open files” 原因分析:在服务器与客户端通信过程中,因服务器发生了
socket
未关导致的
close
d_wait发生,致使监听port打开的句柄数到了
1024
个,且均处于
close
_wait的状态,最终造成配置的port被占满
出现
“Too many open files”,无法再进行通信。
close
_w
Linux 下
socket
编程
linux下的
socket
编程
手机和电脑怎么传文件?从 TCP 到 UDP,手写一个 Android
Socket
聊天 App(附完整代码)
本文讲解 Android 平台基于 TCP/UDP 的
Socket
通信开发,涵盖 Client/Server 双端实现、WiFi Lock 防休眠、Service 维护长连接的 Android 特有处理。提供局域网聊天 App 完整实战代码、文件传输(带进度回调)及 WiFi P2P 直连方案,并总结 readLine 阻塞、AP 隔离等常见踩坑经验与场景选型建议。
Python
Socket
学习总结
1、背景:
Socket
应用最常见的类型就是 客户端/服务器 应用,服务器用来等待客户端的连接。 2、
Socket
API概览:主要用到的
Socket
API函数如下
socket
() bind() listen()
accept
() connect() connect_ex() send() recv()
close
() 【备注1】:
socket
.
socket
() 创建一个类型为
socket
.SOCK_STREAM 的
socket
对象,默认将使用 Transmission Con
Linux/Unix社区
23,223
社区成员
74,536
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章