ソケットを開き、ソケットに作用し、ソケットを閉じて再起動するループがあります。ただし、2回目の繰り返しでSocketException
は、通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の1つの使用のみが許可されます。
ただし、ソケットは閉じている必要がありますnetstat -a
。そのポートなどでリッスンしていることは示されません。例外をスローするコードは次のとおりです。
_bindedLocalSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
_bindedLocalSocket.Bind(new IPEndPoint(Util.ChannelProfileToListeningAddress(_profile), _profile.ListenPort));
_bindedLocalSocket.Listen(30);
_bindedLocalSocket.BeginAccept(new AsyncCallback(OnRequested), null);
ただし、犯人はそのコードではないと思います。そのコードに到達する直前で、接続を閉じようとする前に、次のようになります。
既存の接続がリモート ホストによって強制的に閉じられました System.Net.Sockets.Socket.EndReceive (IAsyncResult asyncResult) で Poderosa.PortForwarding.SynchronizedSocket.EndReceive (IAsyncResult ar) で Poderosa.PortForwarding.Channel.OnSocketData (IAsyncResult 結果) で
プログラムを閉じて再度実行すると、最初の接続が正常に行われ、2 番目の接続はまったく同じように動作します (SocketException)。これを修正する方法を知っている人はいますか?