質問: new IPEndPoint(IPAddress.Parse("127.0.0.1"), 54321); socket.Connect(remoteIpEp ); socket.Disconnect(true); socket.Connect(remoteIpEp ); //ここで例外 socket.Disconnect(true); } } ### 試したこと ・socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.ReuseAddress, true); ・socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.DontLinger, true); ・socket.BeginConnectなど利用しても同じ例外にはまってしまいました。 ・socket.Shutdown(SocketShutdown.Both);
回答: 僕の理解では**出来ません。** DisconnectしたらWindowsの仕様で数十秒間は同じポートは使えません。 一応ぐぐってみました。 下記の回答のベストアンサーが詳しいです。 https://stackoverflow.com/questions/27182180/how-to-reconnect-to-a-socket-gracefully Windowsは即座に同じポートを再利用できません。 頻繁にデータを送ったり受け取ったりするならソケットは生かしっぱなしにしておけばいいです。 先の回答にDisconnect後には最低30秒、最長240秒は必要とあります。 この間をConnectメソッドは待つことができません。 MSDNのSocketのConnectメソッドの説明にもこれを待ちたければ非同期バージョンのBeginConnectを使えとあります。 例外情報とも一致しています。 メソッドの仕様を参照してください。(日本語訳は壊滅的ですが) ただ、仕様を見直した方がいいと思います。