몇 년 동안 잘 돌아가고있는 C# 응용 프로그램이 있습니다. TCP/IP 소켓을 통해 주식 거래를 보내는 기계에 연결합니다.소켓의 한 쪽 끝이 Disconnected, 방화벽입니까?
최근에는 하드웨어 방화벽 뒤에있는 새로운 데이터 센터의 일부 컴퓨터에이를 배포하려고 시도했지만 이상한 연결이 끊어지기 시작했습니다.
연결이 끊어지면 내 앱 (클라이언트 측)에서 소켓을 통해 데이터 수신을 중지한다는 것 외에는 별다른 차이가 없습니다. Wireshark는 소켓에 도달하는 데이터가 없음을 확인하고 디버거에서 응용 프로그램의 수신 스레드가 Receive() 호출을 차단할 때이를 차단합니다. 소켓은 netstat에 ESTABLISHED로 표시됩니다.
하지만 서버 측에서 내 클라이언트의 연결이 끊어져있는 것처럼 보입니다. 로그를 살펴보면 끝 부분의 소켓이 보통 (nRecvd = -1, errno = 104) 또는 (nRecvd = 0, errno = 11)으로 끝나는 것처럼 보입니다. (104는 피어에 의한 연결 재설정 임).
연결 해제는 일정 기간 동안 작동하지 않는 경우에만 발생하는 것으로 보입니다. 지금 클라이언트와 서버 사이에 짧은 메시지를 보내고 응답을 얻는 하트 비트를 구현하여이 문제를 해결했습니다. 이로 인해 연결 해제가 지난 며칠 동안 0으로 떨어졌습니다.
처음에는 하드웨어 방화벽이 문제라고 생각했습니다. 작동하지 않으면 소켓이 시간 종료됩니다. 그러나 방화벽 책임자는이 포트 (8887)의 연결 시간 제한이 2160 분이라고 주장합니다.
Windows Server 2003 및 .NET 3.5를 실행하고 있습니다. 트레이드 서버는 리눅스 머신입니다 (확실하지는 않지만 sles9라고 생각합니다).
무슨 일이 벌어지고 있는지에 대한 아이디어가 있습니까? 방화벽 로그에 액세스 할 수없고 무역 서버의 코드를 변경할 수있는 능력이 없다는 점을 감안할 때이 코드를 디버깅하려면 어떻게해야합니까?
감사합니다, 마이크
감사를 얻을 때 anyting 경우, 무슨 일이보고 싶다면
, 그냥 내가 트랙에 있던 있는지 확인하고 싶었 방화벽 가설과 함께. 그들은 방화벽에서 무역 서버로의 경로에서 나에게 아무 것도 붙잡지 않을 것이다.결국 방화벽으로 판명되었습니다. 그들은 포트 번호를 확인하기 위해 10 배를 요구하면서도 잘못된 포트를 차단 해제했습니다. –