社区
网络编程
帖子详情
一个socket程序,运行一段时间后,需要重启机器才能连接上对方。什么原因啊?
pfans
2008-09-24 04:08:08
重启程序没有效果,只有重启机器才行。
...全文
359
24
打赏
收藏
一个socket程序,运行一段时间后,需要重启机器才能连接上对方。什么原因啊?
重启程序没有效果,只有重启机器才行。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
僵哥
2008-09-25
打赏
举报
回复
[Quote=引用 23 楼 pfans 的回复:]
"MaxUserPort"=dword:0000fffe
是修改系统动态分配最大端口号吗?
"TcpTimedWaitDelay"=dword:00000005
等待时间是5秒还是5毫秒?
[/Quote]
不是端口数,而是连出的数量
5秒
pfans
2008-09-25
打赏
举报
回复
"MaxUserPort"=dword:0000fffe
是修改系统动态分配最大端口号吗?
"TcpTimedWaitDelay"=dword:00000005
等待时间是5秒还是5毫秒?
僵哥
2008-09-25
打赏
举报
回复
[Quote=引用 21 楼 pfans 的回复:]
引用 18 楼 unsigned 的回复:
引用 17 楼 pfans 的回复:
引用 13 楼 ouyh12345 的回复:
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
进程结束后,系统资源如果没有其它进程使用,系统会释放它,即使你在进程结束前没有释放资源系统也会释放。
Socket资源不会立即释放.
说得有道理。
其实我也怀疑是TIME_WAIT的缘故。但这是不是需要短时间大量的主动关闭动作才会引发所有的socke…
[/Quote]
这个问题是比较麻烦的.如果系统的要求并不是太过苛刻,可以考虑将注册表当中Timedwaitedelay的时间设置缩短.然后增加可用连接数.
[code=INIFile][HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"MaxUserPort"=dword:0000fffe
"TcpTimedWaitDelay"=dword:00000005[/code]
pfans
2008-09-25
打赏
举报
回复
[Quote=引用 18 楼 unsigned 的回复:]
引用 17 楼 pfans 的回复:
引用 13 楼 ouyh12345 的回复:
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
进程结束后,系统资源如果没有其它进程使用,系统会释放它,即使你在进程结束前没有释放资源系统也会释放。
Socket资源不会立即释放.
[/Quote]
说得有道理。
其实我也怀疑是TIME_WAIT的缘故。但这是不是需要短时间大量的主动关闭动作才会引发所有的socket都处于TIME_WAIT状态啊?
僵哥
2008-09-25
打赏
举报
回复
[Quote=引用 18 楼 unsigned 的回复:]
引用 17 楼 pfans 的回复:
引用 13 楼 ouyh12345 的回复:
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
进程结束后,系统资源如果没有其它进程使用,系统会释放它,即使你在进程结束前没有释放资源系统也会释放。
Socket资源不会立即释放.
[/Quote]
更正一下,应该不能说是socket描述符资源,而是端口资源.
blackcat242
2008-09-25
打赏
举报
回复
是不是句柄占用太多了,没有释放掉啊
僵哥
2008-09-25
打赏
举报
回复
[Quote=引用 17 楼 pfans 的回复:]
引用 13 楼 ouyh12345 的回复:
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
进程结束后,系统资源如果没有其它进程使用,系统会释放它,即使你在进程结束前没有释放资源系统也会释放。
[/Quote]
Socket资源不会立即释放.
pfans
2008-09-25
打赏
举报
回复
[Quote=引用 13 楼 ouyh12345 的回复:]
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
[/Quote]
进程结束后,系统资源如果没有其它进程使用,系统会释放它,即使你在进程结束前没有释放资源系统也会释放。
scq2099yt
2008-09-25
打赏
举报
回复
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
pfans
2008-09-25
打赏
举报
回复
[Quote=引用 11 楼 loverx 的回复:]
最好的方法,发布新的build,加log
如果client采用指定端口通信,而没有设置端口重用
主动关闭后,由于timewait,会在1--4分钟内,连接不上
客户说连接不上,是一直连接不上?还是连不上就重起了?
[/Quote]
client采用的是系统分配的端口,应该不需要端口重用。这个client本身是一个服务程序,所以客户不会一直等下去,他们尝试连不上就重启了。
这个现象不是经常出现,只是有时出现。
一般情况下,关闭程序再启动都很正常。
僵哥
2008-09-25
打赏
举报
回复
用netstat -na -o查看一下端口使用状况.
ouyh12345
2008-09-25
打赏
举报
回复
应该是socket资源没有释放。
进程结束后,系统资源是不会自动释放的
pfans
2008-09-25
打赏
举报
回复
[Quote=引用 10 楼 RuanJianRenAtMSN 的回复:]
你审请的内存没有删除,比如你要发收数据时审请的内存,查查当出错时有没有删除丢
如下
char *chBUF = new char[20];
int ret = recv(sock,chbuf,20,0); ->这边堵塞了,你关了你的程序没删除内存
if(ret == SOCKET_ERROR)
{
return ->这边返回了,没删除
}
opt;..
delete chbuf
[/Quote]
如果是这类问题,程序重启就可以解决了,不需要重启机器
loverx
2008-09-25
打赏
举报
回复
最好的方法,发布新的build,加log
如果client采用指定端口通信,而没有设置端口重用
主动关闭后,由于timewait,会在1--4分钟内,连接不上
客户说连接不上,是一直连接不上?还是连不上就重起了?
RuanJianRenAtMSN
2008-09-25
打赏
举报
回复
你审请的内存没有删除,比如你要发收数据时审请的内存,查查当出错时有没有删除丢
如下
char *chBUF = new char[20];
int ret = recv(sock,chbuf,20,0); ->这边堵塞了,你关了你的程序没删除内存
if(ret == SOCKET_ERROR)
{
return ->这边返回了,没删除
}
opt;..
delete chbuf
pfans
2008-09-25
打赏
举报
回复
问题是如果因为太多资源被占用的话,重启程序后资源会被系统释放的呀。
WinEggDrop
2008-09-25
打赏
举报
回复
[Quote=引用楼主 pfans 的帖子:]
重启程序没有效果,只有重启机器才行。
[/Quote]
估摸着太多资源被占用.你可以在程序无法向外连接时打开IE访问网站,如果一样无法访问的话,那肯定是太多资源被占用,系统无法腾出资源去建立socket句柄.
mmidd
2008-09-24
打赏
举报
回复
加载dll时出问题吧
pfans
2008-09-24
打赏
举报
回复
[Quote=引用 2 楼 cnzdgs 的回复:]
出错之后,不重启电脑,重新调试程序,看看执行到哪里出问题。
[/Quote]
因为在客户那里出现的这个现象,没法调试。:(
pfans
2008-09-24
打赏
举报
回复
[Quote=引用 4 楼 zhoujianhei 的回复:]
感觉没有调用closesocket
[/Quote]
如果没有调用closesocket,那么重启程序就可以了,程序退出后,系统会自动释放的。
加载更多回复(4)
JAVA
Socket
超时浅析
针对
一个
特定的
连接
,每台
机器
上都有
一个
“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA有两个基于数据流的套接字类:Server
Socket
,服务器用它“侦听”进入的
连接
;
Socket
,客户端用它初始一次
连接
。侦听...
java
socket
tcp长
连接
超时_JAVA
Socket
超时浅析(转)
针对
一个
特定的
连接
,每台
机器
上都有
一个
“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA有两个基于数据流的套接字类:Server
Socket
,服务器用它“侦听”进入的
连接
;
Socket
,客户端用它初始一次
连接
。侦听...
关于JAVA
Socket
超时浅谈
针对
一个
特定的
连接
,每台
机器
上都有
一个
“套接字”,可以想象它们之间有一条虚拟的“线缆”。JAVA有两个基于数据流的套接字类:Server
Socket
,服务器用它“侦听”进入的
连接
;
Socket
,客户端用它初始一次
连接
。侦听...
nio tcp 释放_java
socket
nio
运行
时间久 有掉包现象 而且
运行
缓慢
针对
一个
特定的
连接
,每台
机器
上都有
一个
“套接字”,可以想象它们之间有一条虚拟的“线缆”。Java 有两个基于数据流的套接字类:Server
Socket
,服务器用它“侦听”进入的
连接
;
Socket
,客户端用它初始一次
连接
。...
java如何处理tcp异常断开_针对TCP
连接
异常断开的分析
我们知道,
一个
基于TCP/IP的客户端-服务器的
程序
中,正常情况下,我会是启动服务器使其在
一个
端口上监听请求,等待客户端的
连接
;通过TCP的三次握手,客户端能够通过
socket
建立
一个
到服务器的
连接
;然后,两者就可以...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章