套接字的关机、断开连接、关闭和处置究竟有什么作用

本文关键字:究竟 什么 作用 关机 断开 连接 套接字 | 更新日期: 2023-09-27 18:33:20

对于这四种方法的实际作用,针对网络编程新手,很难找到一个简单的解释。人们通常只说明他们认为在特定情况下关闭套接字的正确方法,而不是每个步骤背后的后台发生的事情。

按照教人到鱼的哲学,你能解释一下ShutdownDisconnectCloseDispose的方法吗?

套接字的关机、断开连接、关闭和处置究竟有什么作用

StackOverflow上的一个答案让我觉得我终于有了某种理解。然后我测试了一下,这是一个新手观点的总结。如果我错了,请纠正我,因为这是基于推理,而不是专业知识。

关闭

Shutdown禁用Send和/或Receive方法,具体取决于提供的参数。它不会禁用底层协议处理,也不会阻止。

如果禁用Send,它还会将零字节发送数据包排队到基础发送缓冲区中。当另一端收到此数据包时,它知道您的套接字将不再发送任何数据。

如果禁用Receive,则另一端可能尝试发送的任何数据都将丢失。

如果在不禁用Send的情况下禁用Receive,它只会阻止套接字接收数据。由于不会发送零字节数据包,因此另一端在尝试发送某些内容之前不会知道任何信息,并且只有在套接字的协议需要确认时才知道。

断开

首先,Disconnect相当于Shutdown(SocketShutdown.Both)

然后它阻止,等待两件事:

  1. 对于要发送的所有排队发送数据。
  2. 让另一端确认零字节数据包(如果适用于底层协议(。

如果调用Disconnect(false),系统资源将被释放。

关闭

Close释放系统资源。可能会突然停止发送排队的数据。如果使用参数调用,将等待数据发送,但仅限于指定的超时。

处理

Dispose 与没有超时参数的Close重载相同。更准确地说,没有超时CloseDispose .

如果使用套接字上的using块,它将自动调用Dispose