gpt4 book ai didi

c#/.Net Socket.Shutdown 关闭

转载 作者:太空狗 更新时间:2023-10-29 23:19:41 26 4
gpt4 key购买 nike

我知道这类问题有很长的历史,但我使用它的方式必须是正确的“.net 方式”,但它似乎不起作用。

我有一个简单的同步 IP 服务器守护进程,它执行一个简单的 AcceptSocket,做一些事情,socket.send、socket.shutdown、socket.close。我的客户端是另一个执行 URLDownloadToFile 的普通 C# 应用程序。

发生的情况是 URLDownloadToFilefails 的部分时间失败并显示 (0x800C0008) .. 认为其下载资源失败。

我的服务器端结束顺序是:

socket.Shutdown(Both);
socket.Close();

如果我把它改成

socket.Disconnect();
socket.Close();

(我打开上面的sockopt灵儿为真,超时5秒)

这很好用。

我是否遗漏了 Shutdown 方法中的某些内容。这听起来像是 MS 希望您使用的“魔法子弹”来优雅地执行退出,最终将发送所有剩余的发送数据。

粗略地说,(这不可能是正确的)它看起来像是关闭.. 终止了可能从 shutdown() 进行的任何异步处理。

有什么想法吗?

最佳答案

基于 Socket.Disconnect

If you need to call Disconnect without first calling Shutdown, you can set the DontLinger Socket option to false and specify a nonzero time-out interval to ensure that data queued for outgoing transmission is sent. Disconnect then blocks until the data is sent or until the specified time-out expires. If you set DontLinger to false and specify a zero time-out interval, Close releases the connection and automatically discards outgoing queued data.

建议关闭充其量是不必要的......

关于c#/.Net Socket.Shutdown 关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/583637/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com