如果服务器没有收到fd_close怎么办?

时间:2017-03-30 06:08:46

标签: windows networking server client iocp

我有一个从头开始编程的高性能客户端服务器系统。我还在改进我的系统。服务器使用io重叠来处理连接。服务器正确处理断开连接和资源释放。在客户端,我使用了带有sd_receive的shutdown命令来通知服务器客户端在从客户端最终发送后没有数据要接收。这很好用。和服务器检测到这是一个正常的断开连接。我很少观察到连接速度很慢时服务器没有检测到这一点。我觉得关闭部分关闭并没有到达服务器。我怎么处理这个。这很重要,如果服务器无法停止,服务器不应包含此类连接。而且我不想强行关闭所有这种联系。

1 个答案:

答案 0 :(得分:0)

  

在客户端我使用了带有sd_receive的shutdown命令来通知服务器客户端在从客户端最终发送后没有数据要接收。

它没有那样做。

  

这很好用

根本不起作用。您正在使用SD_RECEIVE的shutdown命令完全没有意义。关闭或关闭SD_SEND或SD_BOTH,发送FIN:关闭SD_RECEIVE在线路上什么都不做,特别是它不会通知服务器'任何事情。

  

我觉得关闭部分关闭并没有到达服务器。

从不到达服务器。您的代码并不像您认为的那样工作。到达服务器的是FIN,它反过来是关闭的结果,而不是关闭SD_RECEIVE。

这里需要的是服务器端的读取超时。当您使用select()或任何向您提供事件时,您必须自己手动实施超时。