我的服务器和客户端都是在本机,添加了路由因此通信通过了网卡
服务器是接受客户端通信后马上返回一条18字节大小的确认信息。
在大量的通信,单机每秒2万左右,运行一段时间会出现因为大量的TIME_WAIT而阻塞的情况。
我想问的是:
我在自己的测试中,wsasend过程中使用的wsabuf.len设置的比实际要传递的信息字节数大,这种时候,居然没有出现TIME_WAIT卡死的情况(出现了少量的TIME_WAIT)
抓包分析没觉得有什么特殊的问题:
两种情况(wsabuf.len正确和过大)都是服务器端首先关闭连接,都是发出[PSH,ACK]之后,马上发[FIN,ACK]数据报
我实在是想不明白为什么会出现这种问题?
PS:
这么说不太礼貌,但是我不是想要解决因为大量TIME_WAIT阻塞的问题,而是因为这个问题发现了一个现象我不理解。谢谢各位。
PPS:
服务端使用的是IOCP进行通信,客户端是阻塞+线程池的方式
既然客户端和服务器都在本机,那么出现的TIME_WAIT的确认都是服务端吗?服务端通常来说不会主动去发送FIN去短开连接的。是不是客户端发送了什么信息主动要求服务端断开连接的,类似http中的connecttion:close指令。