首页 新闻 会员 周边

TIME_WAIT,IOCP的一个情况不理解

0
悬赏园豆:100 [待解决问题]

我的服务器和客户端都是在本机,添加了路由因此通信通过了网卡
服务器是接受客户端通信后马上返回一条18字节大小的确认信息。

在大量的通信,单机每秒2万左右,运行一段时间会出现因为大量的TIME_WAIT而阻塞的情况。

我想问的是:
我在自己的测试中,wsasend过程中使用的wsabuf.len设置的比实际要传递的信息字节数大,这种时候,居然没有出现TIME_WAIT卡死的情况(出现了少量的TIME_WAIT)

抓包分析没觉得有什么特殊的问题:
两种情况(wsabuf.len正确和过大)都是服务器端首先关闭连接,都是发出[PSH,ACK]之后,马上发[FIN,ACK]数据报

我实在是想不明白为什么会出现这种问题?

PS:
这么说不太礼貌,但是我不是想要解决因为大量TIME_WAIT阻塞的问题,而是因为这个问题发现了一个现象我不理解。谢谢各位。

PPS:
服务端使用的是IOCP进行通信,客户端是阻塞+线程池的方式

珍惜-敬畏-努力的主页 珍惜-敬畏-努力 | 初学一级 | 园豆:102
提问于:2019-05-13 16:55
< >
分享
所有回答(1)
0

既然客户端和服务器都在本机,那么出现的TIME_WAIT的确认都是服务端吗?服务端通常来说不会主动去发送FIN去短开连接的。是不是客户端发送了什么信息主动要求服务端断开连接的,类似http中的connecttion:close指令。

Timetombs | 园豆:3954 (老鸟四级) | 2019-05-14 12:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册