나는 소켓을 열고, 소켓에서 작동 한 다음 소켓을 닫고 다시 시작하는 루프를 가지고있다. 그러나 두 번째 반복에서 나는 SocketException
을 얻습니다. 각 소켓 주소 (프로토콜/네트워크 주소/포트)의 한 가지 용도 만 일반적으로 허용됩니다.
그러나 소켓이 닫혀 있어야합니다. 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)을
일단 프로그램을 닫고 다시 실행하면 첫 번째 연결을 올바르게 만들 수 있고 두 번째 연결은 똑같이 작동합니다 (SocketException). 아무에게도이 문제를 어떻게 해결할 수 있을지 전혀 모르겠습니까?
이 문제가 해결되었지만 폐기 된 소켓에 액세스하려는 프로그램에 문제가 생겼습니다. ( – Malfist
socket.close()를 사용하는 경우 새 소켓 객체를 모두 만들어야한다고 생각합니다. 같은 개체를 사용하려면 socket.disconnect()를 사용해야한다고 생각합니다. MSDN 문서를 살펴보십시오. 100 % 확신 할 수는 없지만 연결 끊김이 무엇인지 확실합니다. – ryeguy
닫힙니다 소켓 닫기를 처리하는 SSHConnection 또는 – Malfist