我认识到此类问题已有很长的历史,但我使用此问题的方式必须是正确的“.net 方式”,但它似乎不起作用。
我有一个简单的同步 IP 服务器守护进程,它执行一个简单的 AcceptSocket,执行一些操作,socket.send、socket.shutdown、socket.close。我的客户端是另一个执行 URLDownloadToFile 操作的简单 C# 应用程序。
发生的情况是,URLDownloadToFilefails 部分时间失败并显示 (0x800C0008) .. 认为其下载资源失败。
我的服务器端结束顺序是:
socket.Shutdown(Both);
socket.Close();
如果我将其更改为
socket.Disconnect();
socket.Close();
(我上面用sockopt Linger true打开,超时5秒)
这很好用。
我是否遗漏了“关闭”方法中的某些内容……这听起来像是 MS 希望您使用“灵丹妙药”来优雅地退出,最终将发送任何剩余的发送数据。
粗略地说,(这不可能是正确的)看起来 close.. 杀死了 shutdown() 可能正在进行的任何异步处理。
有任何想法吗?
基于套接字断开连接 http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.disconnect.aspx
如果您需要在不先调用 Shutdown 的情况下调用 Disconnect,您
可以设置DontLinger Socket选项
为 false 并指定一个非零值
超时间隔以确保数据
排队等待传出传输的是
发送。断开连接然后阻塞,直到
数据发送或直到指定
超时到期。如果你设置
DontLinger 为 false 并指定零
超时间隔,关闭释放
连接并自动丢弃
传出排队数据。
建议关闭充其量是不必要的......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)