gpt4 book ai didi

c# - 如何从服务器优雅地关闭套接字

转载 作者:可可西里 更新时间:2023-11-01 02:33:01 25 4
gpt4 key购买 nike

在服务器端,我正在尝试优雅地关闭连接的套接字。我知道 Socket 上正确的事件顺序应该是:

  1. 使用 SocketShutdown.Send 选项关闭套接字

  2. 循环/等待直到套接字 Receive 返回 0 字节

  3. 套接字关闭

我有几个问题:

  1. 如果 Socket.Receive 永远不会返回(0 字节)怎么办?我们会永远尝试关闭套接字吗?

  2. 每当我在服务器上调用 Close 时,客户端总是会收到“现有连接被远程主机强行关闭”的异常。我怎样才能“优雅地”通知客户这个关闭?

  3. 在服务器上,如果我使用异步 Begin/EndReceive 调用,每当我在套接字上调用 Close 时,它​​总是会在 Begin/EndReceive 线程上导致 ObjectDisposedException。有没有办法在不发生此异常的情况下关闭套接字?

最佳答案

  1. TCP 协议(protocol)保证套接字最终会关闭,除非对等方拒绝允许它关闭。在这种情况下,你应该永远等待或放弃,无论什么合适。

  2. 如果您在接收返回零后关闭套接字,那不应该发生。如果是,则您的代码可能做错了什么。

  3. 您不能在异步操作正在或可能正在使用资源时释放资源。与其调用 close,不如调用 shutdown。在您 100% 完成资源之前,不要调用关闭。

关于c# - 如何从服务器优雅地关闭套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7843765/

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