2011-11-22 2 views
1

내 C++ 응용 프로그램에서 루프에 recv 함수를 사용하고 있습니다. recv 함수에서 음수 값을 가져 와서 네트워크 연결 문제를 확인하고 싶습니다.winsock - recv - 네트워크 연결 문제

내 테스트에서 볼 수있는 한 가지는 네트워크 케이블에서 내릴 때부터 응용 프로그램이이 음수 값을 가질 때까지 ~ 분 동안 기다릴 수 있다는 것입니다.

C++ 코드가 네트워크 연결 문제가 발생하는 시간을 알고 계십니까? 이 시간을 관리 할 수 ​​있습니까?

+0

'음수 값'을 얻으면 검토해야하는 * errno, *도 표시됩니다. – EJP

답변

0

TCP 전용 레벨에서는 정상적으로 작동하지 않습니다. 이 옵션은 SO_KEEPALIVE이지만 꽤 쓸모가 없습니다.

지정된 시간 내에 데이터 또는 하트 비트가 수신되지 않으면 응용 프로그램 수준의 하트 비트를 구현하고 소켓을 연결 해제로 표시합니다 (이는 거의 블로킹 모드를 가정하거나 적어도 select(2) 루프가 시간 초과 됨).

0

C++ 코드와 아무 관련이 없습니다. 그것은 당신이 사용하고있는 특정 네트워크 프로토콜과 관련이 있습니다. TCP라고 가정하면 기본적으로 영원합니다. 유휴 TCP 연결에는 연결된 패킷이 없으며 절대로 연결 손실을 감지 할 수 없습니다.

특정 인터페이스의 손실을 감지하려면 플랫폼의 인터페이스 상태 모니터링 기능을 사용하십시오.

관련 문제