Visual Studio 2010 디버거에서 TWICE 상태를 쿼리 할 때 특히 자발적으로 연결이 끊기는 System.Net 소켓이 있습니다.System.Net 소켓에 대한 이상한 자발적인 연결 해제
_TCPConn = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
나중에 내가 연결하고 "연결됨"속성을보기 위해 루프를 설정 :
이 같은 인스턴스입니다. . . 연결이 연결된 속성을 호출 직후
_TCPConn.Connect(this.IPAddress, REMOTE_TCP_PORT);
// loop to figure out why/when we're disconnecting ...
int loops;
bool bState = false;
for (loops = 0; loops < 100; loops++)
{
bState = _TCPConn.Connected;
if (!_TCPConn.Connected)
{
break;
}
Thread.Sleep(1000);
}
는 디버거에서 사실을하고 네트워크 스니퍼는 호스트와의 성공적인 연결을 보여줍니다.
그러나 디버거에서 Connected 속성을 두 번째로 검사하면 false으로 표시됩니다.
나는 루프의 모든 중단 점을 설정하지 마십시오 루프 (백초)를 통해 모든 방법을 얻을하고 Connected 속성을 떨어질 때 사실 내가 디버거 및 에서 보는 처음 인 경우 false 다음 번에. 나는 그것을하자 10 또는 15 초 중단 점에 대한 루프 경우
, 그것은 사실 내가 디버거에서 보면 처음과 거짓 내가 보는 두 번째 시간이 될 것이며, 그 다음 밖으로 떨어질 것 루프가 그 시점에서 디버거의 인공물이 아니라는 것을 증명합니다. 실제로는 false로 설정됩니다.
연결이 끊어지면 네트워크 스니퍼와 연결된 활동이 없습니다. 즉, 호스트와의 연결이 끊어지지 않고 있습니다.
이것은 단일 스레드 응용 프로그램입니다. 이후에 소켓을 사용하려고 할 때 종종 연결이 끊어져서 왜 그 이유를 알아 내려했기 때문에 나는 이것을 보았습니다.
그래서 이전에 발견 한 문제가 사실임을 입증했습니다. 여전히 연결 해제의 원인을 찾지 못했습니다. 환경적인 측면에서 맬웨어 방지 및 방화벽과 같은 것들부터 시작하십시오. –
나는 아직도 내가하고있는 일이라고 생각한다. System.Net 소켓은 모든 종류의 것들에 널리 사용됩니다. 따라서 방화벽이나 맬웨어 방지 프로그램이 자발적으로 소켓을 연결 해제하는 경우 많은 것들이 엉망이 될 것으로 예상됩니다. FWIW 내가 쓰고있는 프로그램은 Winsock을 사용하는 고대 VB6 프로그램의 대체품이며 같은 IP 주소와 포트에 잘 연결되어 실행됩니다.내 코드라고하는 또 다른 데이터 포인트는 Win7과 XP PC에서 서로 다른 방화벽과 맬웨어 방지 프로그램을 실행하면서 재현 할 수 있다는 것입니다. – user316117
나는 그것을 디버거로 생각했지만, 디버거에서 이것을 처음 보았던 것은 그것이 자연스럽게 끊어져 버렸다는 것을 기억한다. 여전히, 나는이 코드를 썸 드라이브에 넣고 오늘 밤 집에 가져 가서 집에서 가지고있는 약간 다른 디버거에서이 코드를 시험해보기로했다. – user316117