私はソケットを開き、ソケットに作用してからソケットを閉じて再起動するループを持っています。 しかし、2回目の反復ではSocketException
が得られます。通常、各ソケットアドレス(プロトコル/ネットワークアドレス/ポート)の使用は1つだけ許可されます。
しかし、ソケットを閉じる必要があります。netstat -a
は、私がそのポートなどでリッスンしていることを示していません。例外をスローするコードは次のとおりです。このSocketExceptionを修正するには
_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);
はしかし、私はそのコードを取得する直前に、犯人はそのコードではないと思うし、私はこれを取得、接続を閉じる前に:
An existing connection was forcibly closed by the remote host at System.Net.Sockets.Socket.EndReceive(IAsyncResult asyncResult) at Poderosa.PortForwarding.SynchronizedSocket.EndReceive(IAsyncResult ar) at Poderosa.PortForwarding.Channel.OnSocketData(IAsyncResult result)
プログラムを閉じてもう一度実行すると、最初の接続が正常に行われ、2番目の接続はまったく同じ(SocketException)となります。 誰も私がこれをどのように修正できるか考えていますか?
これで問題は解決しましたが、私はプログラムがソケットソケットにアクセスしようとしたときに問題に遭遇しています:( – Malfist
socket.close()を使用している場合、新しいソケットオブジェクトをすべて作成する必要があります。同じオブジェクトを使用するには、socket.disconnect()を使う必要があると思います。MSDNのドキュメントを見てください - 私は100%確信していませんが、接続が切断されていると確信しています。 – ryeguy
私は閉じていますソケットのクローズを処理するSSHConnection、またはそうするはずです... – Malfist