我认识到这种类型的问题有很长的历史,但我使用它的方式必须是正确的'.net方式',但它似乎不起作用.
我有一个简单的同步IP服务器守护进程,它执行一个简单的AcceptSocket,做一些东西,socket.send,socket.shutdown,socket.close.我的客户端是另一个简单的C#应用程序,它执行URLDownloadToFile.
会发生的事情是URLDownloadToFilefails失败的部分时间(0x800C0008)..认为其下载资源失败.
我的服务器端结束序列是:
socket.Shutdown(Both); socket.Close();
如果我改成这个
socket.Disconnect(); socket.Close();
(我用sockopt Linger打开以上内容,超时5秒)
这很棒.
我在Shutdown方法上遗漏了一些东西......听起来好像是"魔术子弹"MS希望你用它来优雅地进行退出,最终会发送任何剩余的发送数据.
总而言之,(这可能不对)看起来像关闭..杀死了shutdown()可能正在进行的任何异步处理.
有任何想法吗?