C/S 애플리케이션이 있습니다. 클라이언트는 일반적으로 TCP 프로토콜을 사용하여 서버에 많은 양의 데이터를 보냅니다. LAN 환경 (10MB/s)에서는 잘 작동하지만 WAN 환경 (200KB/s)으로 마이그레이션하면 네트워크 오류가 발생합니다.WSAECONNABORTED 오류를 수정하는 방법?
내가 버그를 추적하면 클라이언트의 send()
이 -1을 반환하고 WSAGetLastError()
이 처음에 WSAECONNABORTED
을 반환한다는 것을 알았습니다. 그리고 몇 초 후 서버의 recv()
도 -1을 반환하고 errno
은 ECONNRESET
입니다.
문서를 참조한 후 기본 이해가 WSAECONNABORTED
및 ECONNRESET
입니다. 나는 이전이 나쁜 네트워크에서 비롯된 것이라고 생각한다 : TCP는 몇 가지 재전송 실패 후에 소켓을 닫는다. 후자는 의뢰인의 예상치 못한 폐쇄 작전의 결과입니다.
이런 종류의 오류를 어떻게 처리해야하는지 궁금합니다. 즉시 다시 연결 하시겠습니까? 아니면 어떤 소켓 옵션이 도움이 될 수 있습니까?
대부분의 오류 코드와 마찬가지로 WSAECONNABORTED는 많은 원인이 있습니다. 가장 일반적인 것은 shutdown() 또는 closesocket()에 의해 다른 곳에서 수정 된 소켓을 사용하려고 할 때입니다. FD_CLOSE 이벤트를 처리하는 타이밍을 확인합니다. FD_READ 이후에 FD_CLOSE를받는 것이 완벽하게 가능하며, 소켓이 닫히기 전에 읽기 기능이 끝나지 않았습니다. 변함없이 문제는 소프트웨어가 네트워크 이벤트를 처리하는 방식이거나보다 정확하게는 이러한 이벤트를 처리하는 방식 일 것입니다. 희망이 도움이됩니다. : o) – curzonnassau