社区
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的问题,但不知道原因在哪里?
...全文
481
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
我可以肯定,在循环体里,绝对释放了所有打开的文件句柄
socket
编程之
accept
函数的理解
在进入我们的正题之前,再来复习一波编写服务器的函数流程吧 服务器端:
socket
()-->bind( )-->listen()-->
accept
()-->read()/write()--->
close
()
socket
()//创建套接字 bind()//分配套接字地址 listen()//等待连接请求状态
accept
()//允许连接 read()/write()//进行数据交换
close
()//断开连接
socket
()//创建套接字 bind()//分配套
socket
多线程无法
close
的
问题
现在遇到一个情景,处理数据的代码运行在A线程里,在B线程里对A中的
socket
的
accept
进行
close
,结果每次都卡在accpet那里,无法
close
成功,因为在本线程中,
socket
可以正常关闭,但是如果在B线程来关闭A线程中的的
socket
,则会
出现
线程碰撞
问题
。 想了很久,找到一个可行的方法是,设置一个静态变量,用于充当锁,如果过关闭锁,
socket
在本线程关闭。在B线程中对开关进行开...
理解
Socket
网络编程
Accept
()函数
Socket
编程大家都很熟悉,服务器端的
Socket
在Bind()和Listen()后就开始进入
Accept
()了。 此时 Server端在侦听(Listen)的端口等待客户端来连接(Connect),这个连接将加入到等待接受的队列中,如果有空闲的连接
Accept
将返回一个新的套接字描述符。这很微妙,此时Server端有两个
Socket
了,原来那个还在侦听
socket
编程:
accept
()函数详解
文章目录1. 函数原型2. 函数使用3. 参数4. 通过函数也可以得到客户端信息5. 得到本地服务器信息6. 返回值 官方文档:https://docs.microsoft.com/en-us/windows/win32/api/winsock2/nf-winsock2-
accept
1. 函数原型
accept
函数允许在套接字上进行传入连接尝试。
SOCKET
WSAAPI
accept
(
SOCKET
s, sockaddr *addr, int *addrlen ); li
Python
socket
编程中
accept
阻塞
问题
的一种解决方法
Python
socket
编程中的
accept
阻塞
问题
的一种解决方法 在进行 Python
socket
TCP server 端编程时,需要在其运行时接收停止命令事件,停止整个服务程序。虽然这是不常见的需求,但实现起来颇有些周折,其中
accept
执行时的阻塞
问题
是关键所在。 一般情况下,Python
Socket
的
accept
是阻塞执行的,它的阻塞能够屏蔽程序对CTRL-C的接收
Linux/Unix社区
23,125
社区成员
74,509
社区内容
发帖
与我相关
我的任务
Linux/Unix社区
Linux/Unix社区 应用程序开发区
复制链接
扫一扫
分享
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章