비 차단 소켓의 경우 원격 클라이언트가 정상적으로 연결이 끊어지면 recv()
이 오류 코드없이 0을 반환한다는 것을 알고 있습니다 (우리가 서버라고 가정). 비정상적인 단절은 어떻게 감지합니까? recv()
은 여전히 0을 반환합니까, 아니면이를 감지하기 위해 API를 사용하는 다른 방법이 있습니까?winsock2의 비정상적인 연결 끊김을 감지하는 방법은 무엇입니까?
답변
소켓이 정상적으로 닫히지 않고 연결이 물리적으로 끊어 지거나 다른 호스트가 종료 된 경우 recv
이 영원히 대기합니다. 소켓 수준에서 select()
을 사용하고 대기중인 데이터가 소켓에서 읽을 수 있도록 시간 제한을 설정할 수 있습니다. 당신은 이것을 반복 할 것이며 만약 데이터가 이용 가능하다면 - 그것을 읽으십시오 (recv()
); select()
시간이 초과되면 소켓을 정상적으로 닫은 다음 다시 연결하십시오.
또 다른 솔루션은 프로토콜에 연결 유지를 구현 한 것입니다. 한 쪽에서는 주기적으로 메시지를 보내고 다른 쪽에서는 시간 초과가 설정된 타이머 (송신 기간에 맞게 조정 됨)가 있고 기다리고 있습니다. 타이머 시간이 초과되면 "대기중인"호스트는 소켓을 닫고 다시 연결을 시도합니다.
좋은 지적 - OP가 '비정상적인 연결 끊김'으로 의미하는 것이면 오랫동안 기다릴 수 있습니다. –
recv()에 대한 MSDN에서 특히 무엇을 반환하는지보십시오. 모든 것이 드러날 것입니다!
'비정상적인 연결 해제'<> 연결이 끊어지지 않았 음을 참고하십시오! 네트워크 케이블이 피어에서 빠져 나와 데이터를 보내지 않으려 고하면 (즉, 데이터를 기다리는 중입니다.) @Bojan에 의해 지적 된대로 영원히 기다릴 수 있습니다 –
제 질문을 자세히 검토하십시오. 비정상적인 연결 해제 (또는 비정상적인 연결 해제)에 대해 질문했습니다. recv() 문서는 _graceful_ 연결 해제 중 0을 반환합니다. –
'going away'서버는 클라이언트 POV와의 비정상적인 연결 해제가 아닙니다. WSAECONNRESET, WSAETIMEDOUT 또는 WSAECONNABORTED는 WSAGetLastError()가 반환 한 비정상적인 연결 해제입니다. recv()는 SOCKET_ERROR와 함께 반환됩니다. 반 연결이 비정상적으로 끊어지지는 않습니다. –
- 1. C에서 소켓 연결 끊김을 감지하는 방법
- 2. Linux에서 Twisted의 비정상적인 연결 해제를 감지하는 방법은 무엇입니까?
- 3. Java가 연결 끊김을 감지했습니다.
- 4. TCP 연결 유실을 감지하는 방법은 무엇입니까?
- 5. .NET에서 클라이언트 연결 끊김을 검색하는 최선의 방법은 무엇입니까?
- 6. ASP.NET에서 서버 전송 이벤트를 사용할 때 연결 끊김을 감지하는 방법은 무엇입니까?
- 7. WiFi 액세스 포인트와의 연결 끊김을 감지합니다.
- 8. 실행하기 전에 비정상적인 검색어 (의심스러운 주사)를 감지하는 방법은 무엇입니까?
- 9. Java SocketChannel이 연결 끊김을 감지하지 못합니까?
- 10. Strophe javascript가 일부 지연으로 연결 끊김을 방지합니다.
- 11. Tomcat 서블릿에서 클라이언트 연결 끊김을 감지 했습니까?
- 12. 파이썬 요청 라이브러리를 사용하여 트위터의 사용자 스트림에서 사용 - 연결 끊김을 감지하는 방법?
- 13. CFStream/NSStream과의 연결 끊김을 어떻게 감지 할 수 있습니까?
- 14. 브로드 캐스트 수신기가 Wi-Fi 연결 끊김을 감지하지 못했습니다.
- 15. 파일을 감지하는 방법은 무엇입니까?
- 16. 주파수를 감지하는 방법은 무엇입니까?
- 17. CATiledLayer를 감지하는 방법은 무엇입니까?
- 18. opencgi_finish_request는 열린 세션이 존재할 때 연결 끊김을 만듭니다.
- 19. 비정상적인 JSON 저장소에서 Ext.data.Store를 만드는 방법은 무엇입니까?
- 20. Orbeon : 연결 ressources (css, images, js) 비정상적인 동작으로 연결
- 21. 데이터베이스 유형을 감지하는 방법은 무엇입니까?
- 22. 가속도계에서 타작을 감지하는 방법은 무엇입니까?
- 23. 메모리 누수를 감지하는 방법은 무엇입니까?
- 24. 페이지 리디렉션을 감지하는 방법은 무엇입니까?
- 25. 브라우저 기능을 감지하는 방법은 무엇입니까?
- 26. 변수가 변경되었는지 감지하는 방법은 무엇입니까?
- 27. 넘치는 일을 감지하는 방법은 무엇입니까?
- 28. confirm() 선택을 감지하는 방법은 무엇입니까?
- 29. 광고 링크를 감지하는 방법은 무엇입니까?
- 30. three.js에서 충돌을 감지하는 방법은 무엇입니까?
recv()에 대한 MSDN을 살펴보십시오. 모든 것이 드러날 것입니다! –