如何从服务器优雅地关闭套接字
本文关键字:套接字 服务器 | 更新日期: 2023-09-27 18:11:48
在服务器端,我正在尝试优雅地关闭连接的套接字。我知道Socket上事件的正确顺序应该是:
-
socket Shutdown。发送选择
-
循环/等待直到socket Receive返回0字节
-
套接字关闭
我有几个问题:
-
what if Socket。接收从不返回(0字节)?我们会被困在试图永远关闭插座吗?
-
每当我在服务器上调用Close时,客户端总是收到"现有连接被远程主机强制关闭"的异常。我怎样才能"优雅地"通知客户端这个关闭?
-
在服务器上,如果我使用异步开始/EndReceive调用,每当我在套接字上调用Close时,它总是在开始/EndReceive线程上导致ObjectDisposedException。是否没有办法关闭套接字而不发生此异常?
-
TCP协议保证套接字将最终关闭,除非对端拒绝允许它关闭。在这种情况下,你应该永远等待,或者放弃,无论如何。
-
如果在receive返回0后关闭套接字,则不应该发生这种情况。
-
当异步操作正在或可能正在使用资源时,不能释放资源。与其说关闭,不如说关闭。在100%使用完资源之前,不要调用close。