Windows 如果服务器没有';无法接收fd_关闭

Windows 如果服务器没有';无法接收fd_关闭,windows,networking,server,client,iocp,Windows,Networking,Server,Client,Iocp,我有一个从零开始编程的高性能客户机-服务器系统。我仍在改进我的系统。服务器使用io重叠来处理连接。服务器正确处理断开连接和资源释放。在客户端,我使用带有sd_receive的shutdown命令通知服务器,在从客户端进行最终发送之后,客户端没有要接收的数据。这很有效。服务器检测到这是正常的断开连接。我很少观察到当连接非常慢时,服务器没有检测到这一点。我觉得关闭部分关闭没有到达服务器。我该怎么办。这一点很重要,如果服务器无法停止,则服务器不应包含此类连接。我不想用武力切断所有这些联系 在客户端,我

我有一个从零开始编程的高性能客户机-服务器系统。我仍在改进我的系统。服务器使用io重叠来处理连接。服务器正确处理断开连接和资源释放。在客户端,我使用带有sd_receive的shutdown命令通知服务器,在从客户端进行最终发送之后,客户端没有要接收的数据。这很有效。服务器检测到这是正常的断开连接。我很少观察到当连接非常慢时,服务器没有检测到这一点。我觉得关闭部分关闭没有到达服务器。我该怎么办。这一点很重要,如果服务器无法停止,则服务器不应包含此类连接。我不想用武力切断所有这些联系

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

它不会那样做

这很有效

这根本不起作用。您使用的带有SD_RECEIVE的shutdown命令完全没有意义。关闭或使用SD_SEND或SD_两者同时关闭会发送一个FIN:使用SD_RECEIVE关闭不会在线路上执行任何操作,特别是它不会“通知服务器”任何事情

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

它永远不会到达服务器。你的代码并不像你想象的那样工作。到达服务器的是FIN,而FIN又是关闭的结果,而不是关闭SD_接收


这里需要的是服务器端的读取超时。当您使用
select()
或任何向您传递事件的工具时,您必须自己手动执行超时。

发出关机命令后执行“是”。我合上插座