社区
网络编程
帖子详情
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
simon8383
2007-07-04 09:26:28
服务器和子客户在同一台机器上
当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后
调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
...全文
1488
8
打赏
收藏
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
服务器和子客户在同一台机器上 当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后 调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
simon8383
2007-07-05
打赏
举报
回复
明白了。。结帖
mfc168
2007-07-05
打赏
举报
回复
导致的原因是在某一方close的时候,两方分别要发送和接受两个包:FIN,ACK,假如服务器关闭或者退出,造成客户地址和端口处于TIME_WAIT状态,如果被动方发送的FIN包没有被主动方收到,则处于CLOSE_WAIT状态
设置SO_LINGER套接字选项表示:从容关闭还是强行关闭?
l_onoff=1表示从容关闭,发送关闭fin包后,等待是否有没有发完的数据包,而等待的时间就是用l_linger来设置
linger m_sLinger;
m_sLinger.l_onoff = 1; // (在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)
m_sLinger.l_linger = 0; // (容许逗留的时间为0秒)
setsockopt(sockConnected,
SOL_SOCKET,
SO_LINGER,
(const char*)&m_sLinger,
sizeof(linger));
我们避免不了WAIT状态冻结的再次出现,只能做到使影响降到最小,希望那个重用套接字选项能够使得下一次重新建立连接时可以重用那些处于WAIT状态的端口
僵哥
2007-07-05
打赏
举报
回复
首先设置Dont Linger为false,即打开Linger选项,使之相关设置生效,然后再把Linger的时间设置为0。
mfc168
2007-07-04
打赏
举报
回复
int nReuseOn=1;
setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (char *)&nReuseOn, sizeof(nReuseOn));
将端口设置成可重用
simon8383
2007-07-04
打赏
举报
回复
怎么还得设置InternalLinger.l_onoff=1;啊?
Does not block close waiting for unsent data to be sent. Setting this option is equivalent to setting SO_LINGER with l_onoff set to zero.
是不是我设置反了。。
反着设置貌似没问题了。
simon8383
2007-07-04
打赏
举报
回复
bool bDontLinger = false;
setsockopt(s,SOL_SOCKET,SO_DONTLINGER,(const char*)&bDontLinger,sizeof(BOOL));
int iRes=closesocket(s);
s=NULL;
return iRes;
问题依旧啊 怪异了啊 我看了msdn上写的 这个选项确实是 去掉TIMEWAIT的 可是我用了没效果
僵哥
2007-07-04
打赏
举报
回复
Close的时候设置SO_LINGER为0
//强行关闭一个socket
void ForceCloseSocket(SOCKET &s,bool bClose)
{
bool bDontLinger=false;
setsockopt(s,
SOL_SOCKET,
SO_DONTLINGER,
(char *)&bDontLinger,
sizeof(bool));
linger InternalLinger;
InternalLinger.l_onoff=1;
InternalLinger.l_linger=0;
setsockopt(s,
SOL_SOCKET,
SO_LINGER,
(const char*)&InternalLinger,
sizeof(linger));
if(bClose)
{
closesocket(s);
s=INVALID_SOCKET;
}
}
simon8383
2007-07-04
打赏
举报
回复
应该是bool bDontLinger = true吧?
不TimeWait = true
Linux 网络管理命令 < Series 10. >
07/22)命令
netstat
:查看网络
状态
08/22)命令 ss:查看网络
状态
09/22)命令 ping:测试主机之间网络的连通性 10/22)命令 traceroute:追踪数据转发路由状况 11/22)命令 arping:发送arp请求 12/22)命令 ...
【重庆思庄Linux技术分享】-
netstat
-an
查看到大量的TIME_WAIT
状态
的解决办法
netstat
-an
|grep 1521 |wc -l 6688
netstat
-an
|grep 1521 tcp 0 0 11.0.15.88:1521 11.0.15.66:57297 TIME_WAIT
状态
全是 time_wait
netstat
下time_wait
状态
的tcp连接: 1.这是一种处于连接完全
关闭
状态
前的
状态
; 2.通常要等上4分钟(windows server)的时间才能完全
关闭
; 3.这种
状态
下的t
netstat
-an
查看到大量的TIME_WAIT
状态
的解决办法
netstat
-an
查看到大量的TIME_WAIT
状态
的解决办法 突然遇到一个socket连接No buffer space available的问题 解决办法是修改Linux内核参数, 修改系统socket最大连接数,在文件/etc/security/limits.conf最后加入下面两行: * soft nofile 32768 * hard nofile 32768
linux
端口
查看time_wait,
netstat
-an
查看到大量的TIME_WAIT
状态
的解决办法
netstat
下time_wait
状态
的tcp连接:1.这是一种处于连接完全
关闭
状态
前的
状态
;2.通常要等上4分钟(windows server)的时间才能完全
关闭
;3.这种
状态
下的tcp连接占用句柄与
端口
等资源,服务器也要为维护这些连接
状态
消耗资源;4.解决这种time_wait的tcp连接只有让服务器能够快速回收和重用那些TIME_WAIT的资源:修改注册表[HKEY_LOCAL_MACHIN...
netstat
监控大量ESTABLISHED连接数和TIME_WAIT连接数题解决
https://www.cnblogs.com/sunxucool/p/3449068.html查看网络连接数:
netstat
-an
|wc -l
netstat
-an
|grep xx |wc -l 查看某个/特定ip的连接数
netstat
-an
|grep TIME_WAIT|wc -l 查看连接数等待time_wait
状态
连接数
netstat
-an
|grep ES...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章