Winsock 允許伺服器對同一連接埠進行多重繫結,封包會遞交給指定最明確的那個 Socket,無權限之分,此即連接埠重用。
使用 SetSocketOption 設定 SocketOptionName.ReuseAddress 為 true。
socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
// 第一個 Socket
Socket socket1;
IPEndPoint localEP = new IPEndPoint(IPAddress.Any, 20000);
socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket1.Bind(localEP);
// 第二個 Socket,啟用重用
Socket socket2;
socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
socket2.Bind(localEP); // 同一連接埠綁定成功
範例原始碼可至 此處下載。