套接字的关机、断开连接、关闭和处置究竟有什么作用
本文关键字:究竟 什么 作用 关机 断开 连接 套接字 | 更新日期: 2023-09-27 18:33:20
对于这四种方法的实际作用,针对网络编程新手,很难找到一个简单的解释。人们通常只说明他们认为在特定情况下关闭套接字的正确方法,而不是每个步骤背后的后台发生的事情。
按照教人到鱼的哲学,你能解释一下Shutdown
、Disconnect
、Close
和Dispose
的方法吗?
StackOverflow上的一个答案让我觉得我终于有了某种理解。然后我测试了一下,这是一个新手观点的总结。如果我错了,请纠正我,因为这是基于推理,而不是专业知识。
关闭
Shutdown
禁用Send
和/或Receive
方法,具体取决于提供的参数。它不会禁用底层协议处理,也不会阻止。
如果禁用Send
,它还会将零字节发送数据包排队到基础发送缓冲区中。当另一端收到此数据包时,它知道您的套接字将不再发送任何数据。
如果禁用Receive
,则另一端可能尝试发送的任何数据都将丢失。
如果在不禁用Send
的情况下禁用Receive
,它只会阻止套接字接收数据。由于不会发送零字节数据包,因此另一端在尝试发送某些内容之前不会知道任何信息,并且只有在套接字的协议需要确认时才知道。
断开
首先,Disconnect
相当于Shutdown(SocketShutdown.Both)
。
然后它阻止,等待两件事:
- 对于要发送的所有排队发送数据。
- 让另一端确认零字节数据包(如果适用于底层协议(。
如果调用Disconnect(false)
,系统资源将被释放。
关闭
Close
释放系统资源。可能会突然停止发送排队的数据。如果使用参数调用,将等待数据发送,但仅限于指定的超时。
处理
Dispose
与没有超时参数的Close
重载相同。更准确地说,没有超时Close
与 Dispose
.
如果使用套接字上的using
块,它将自动调用Dispose
。