2016-12-21 2 views
0

SSL 핸드 셰이크 연결과 시작 사이에 일시 중지가 발생하여 원격 서버가 연결을 닫을 때 HResult = 0x800704C9로 System.Exception이 발생합니다.0x88704C9 오류가 StreamSocket.UpgradeToSslAsync와 일치하지 않습니다.

await socket.UpgradeToSslAsync(SocketProtectionLevel.Tls12, socket.Information.RemoteHostName); 

Windows.Networking.Sockets.SocketError.GetStatus (e.HResult)는 0x800704C9 코드 알 준다. 그러나 오류 조회 도구는이 코드를 인식하고 0x04C9/0x800704C9 코드가 "원격 컴퓨터가 네트워크 연결을 거부했습니다."라는 내용을 나타냅니다. 오류.

그러나 CONNECTION REFUSED에는 자체 코드 0x274D가 있습니다 ("대상 컴퓨터가 적극적으로 거부했기 때문에 연결할 수 없습니다."). Windows에는 동일한 오류 코드가 두 개 있으며 SocketError 클래스에서 그 중 하나만 인식합니다.

0x04C9와 0x274D 오류의 차이점은 무엇이며이 코드 중 하나만 이해할 수 있도록 SocketError.GetStatus의 버그입니까?

내 코드는 발생 된 예외가 일반인지 또는 네트워크 관련인지를 판별하는 다른 방법이 없기 때문에 SocketError.GetStatus! = SocketErrorStatus.Unknown에 많이 의존합니다 (throw되는 모든 예외는 IOException 또는 System.Exception 클래스가 아닙니다.) 뭐든지). 내가 SocketError.GetStatus에 의해 인식되는 어떤 다른 네트워크 관련 오류가 일일 발생할 수 없습니다 걱정 해요

..

답변

0

HRESULT 오류 : 0x8007274d

Winsock을 오류 : WSAECONNREFUSED (10061)

대상 컴퓨터가 적극적으로 거부 했으므로 연결할 수 없습니다. 0x800704c9

시스템 오류 코드 : (1225)

ERROR_CONNECTION_REFUSED 이것은 보통 외국 호스트

HRESULT 오류를 실행없이 서버 응용 프로그램과 하나입니다에 비활성 서비스에 연결을 시도하는 발생

원격 컴퓨터가 네트워크 연결을 거부했음을 의미합니다. 그러나 Windows Sockets Error Codes 중 하나가 아닙니다. 따라서 Windows.Networking.Sockets.SocketError.GetStatus(e.HResult)은 0x800704C9 코드에 대해 알 수 없음을 제공합니다.

+0

죄송합니다. 이해할 수 없습니다. 이 두 가지 유형의 "거부 됨"과 SocketError.GetStatus가 지원하는 이유 중 하나만 이해하지 못했습니다. – Alex

+0

@ Alex'0x800704C9' 오류는 소켓 작업으로 인해 발생하지 않습니다. –

+0

"원격 컴퓨터가 네트워크 연결을 거부했습니다"는 네트워크 작업처럼 보입니다 ... OutOfMemoryException, NullReferenceException 등과 같이 네트워크 문제와 완전히 관련이 없으며 다르게 처리되어야합니다 (대신 호출자에게 던져 져야 함). 내 코드에서 처리). – Alex

관련 문제