2011-02-18 47 views
5

Socket.Disconnect(bool reuse)根據MSDN使程序能夠重用套接字。我的問題是:Socket.Disconnect(布爾重用)

  1. 如果我們決定重用套接字是否意味着它將重用相同的本地端點?它會保留該套接字的端口,還是隻是(我不相信它)保存所有的對象資源?

  2. 如果實際上它只保存資源,它們將被分配給下一個連接,如果是這樣,發送/接收緩衝區會自動刷新還是有某種方式刷新它們? Socket.ShutDown(ShutDown.Both)是否會在斷開連接時爲我執行此操作?

  3. 在什麼情況下我會使用Socket.Disconnect(false)?如果所有的目的都是重用套接字,那麼這會授予我什麼?

+0

我知道這並沒有明確回答你的問題,但是這個答案給出了關於關閉.NET套接字和實際對windows級套接字有什麼影響的更多細節:http:// stackoverflow.com/questions/2014887/socket-close-doesnt-really-close-tcp-socket-c充其量只是通過調用套接字對象上的Shutdown和Close,看起來似乎不會保證不同的端點。 – JNadal 2011-12-16 22:42:47

回答

5
  1. 如果重用=假套接字將被自動關閉後設置。所有EndPoint和Buffer大小的設置都不會重置爲默認值,但您可以根據需要進行更改。設置用戶決定更改連接端口。您只需關閉套接字,更改端口並重新連接套接字,而無需創建新套接字並重新設置。

  2. Socket.Shutdown只是禁用發送/接收/兩者;不要斷開插座。但是,對於新的傳入/傳出數據會發生這種情況,所以緩衝區將被正常刷新。在斷開連接之前調用它是一種很好的做法,以確保在斷開連接時發送了所有數據並且沒有收到任何數據。

  3. 回到1的例子。因爲你只需要改變端口。您不想再次創建套接字,將套接字的所有參數配置爲事件和緩衝區,等等。它消耗時間和資源,因此最好重用已有的套接字。