社区
网络编程
帖子详情
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
simon8383
2007-07-04 09:26:28
服务器和子客户在同一台机器上
当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后
调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
...全文
1497
8
打赏
收藏
端口关闭后,用Netstat -an 看 状态是TimeWait?而且不能重新使用
服务器和子客户在同一台机器上 当我的服务器accept()一个端口后,和 子客户交互的端口 通信,通信完毕后 调用closesocket() 以及shutdown()。然后用netstat -an 看开放的端口。发现有大量的以及调用closesocket() 以及shutdown()。的端口 在TIMEWAIT状态。过一段时间后我的计算机 的端口全被这样的占用,不能在新接受连接,请教这样的情况如何避免。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
net
stat
命令查看本机开放
端口
使用
`net
stat
-an`命令可以有效地帮助我们了解本机上开放的所有
端口
以及它们的
状态
,这对于及时发现并处理潜在的网络安全隐患至关重要。此外,了解TCP连接的不同
状态
也有助于更好地理解网络通信的过程,为日常的网络...
net
stat
的用法
- **
TIME
-
WAIT
**:等待足够时间确保远程端接收到
关闭
请求。 - **CLOSED**:没有连接
状态
。 #### 六、总结 `net
stat
`命令是网络管理和故障排除中不可或缺的工具之一。掌握其基本
使用
方法和常见选项,有助于快速定位...
linux常用命令
- `net
stat
-n | grep
TIME
_
WAIT
`: 提取所有处于
TIME
_
WAIT
状态
的连接。 - `awk '{print $5}'`: 提取远程IP地址。 - `sort | uniq -c`: 计算每个IP出现的次数。 - `sort -rn`: 按连接数从多到少排序。 - `head -n 20`...
071204awk应用1
- `net
stat
-n|grep
TIME
_
WAIT
|awk '{print $5}'|sort|uniq -c|sort -rn|head -n20`: 找出最多的
TIME
_
WAIT
状态
连接。 - `net
stat
-an | grep SYN | awk '{print $5}' | awk -F: '{print $1}' | sort | uniq -c | ...
用DOS命令来查看好友的IP地址
聊天结束后再次执行同样的命令,这时可以发现原本显示为`ESTABLISHED`的
状态
变成了`
TIME
_
WAIT
`,这就意味着原先的那个连接已经断开,由此可以推断出与你聊天的好友的IP地址。 #### 总结 通过以上步骤,我们可以在...
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章