Socket.Disconnect(bool重用)

时间:2011-02-18 07:05:55

标签: c# sockets

根据{{​​3}},

Socket.Disconnect(bool reuse)使程序能够重用套接字。我的问题是:

  1. 如果我们决定重用套接字,那意味着它会重用相同的本地端点吗?它会保留该套接字的端口还是只是(我不相信它)保存所有对象资源?

  2. 如果它实际上只保存了资源,它们是否会分配给下一个连接,如果是,那么发送/接收缓冲区会自动刷新还是有某种方式刷新它们? Socket.ShutDown(ShutDown.Both)在断开连接时会为我做这件事吗?

  3. 我会在什么情况下使用Socket.Disconnect(false)?如果所有目的都是为了重用套接字,那么这将授予我什么?

1 个答案:

答案 0 :(得分:5)

  1. 如果reuse = false,套接字将在关闭后自动处理。作为EndPoint和Buffer大小的所有设置都不会重置为默认值,但您可以根据需要进行更改。用户决定更改连接端口。您只需关闭套接字,更改端口并再次连接套接字,而无需创建新套接字并重新设置它。

  2. Socket.Shutdown只是禁用发送/接收/两者;不要断开插座。但是,对于新的传入/传出数据会发生这种情况,因此缓冲区将被正常刷新。最好在断开连接之前调用它,以确保在断开连接时发送所有数据并且没有数据被接收。

  3. 回到1的示例。设置您只需要更改端口。您不想再次创建套接字,将套接字的所有参数再次配置为事件和缓冲区等。它消耗时间和资源,因此最好重用已有的套接字。