2012-08-02 1 views
3

Dns.GetHostAddresses을 사용하여 호스트 이름을 확인하는 작은 테스트 프로그램을 작성했습니다. 존재하지 않는 호스트 이름을 입력하면 SocketException이 표시되고 메시지는 No such host is known이됩니다.
오류 메시지가 내 UI에 넣을 수있을 정도로 작았고, 곧 바로 그 점을 알기 때문에 내가 좋아했습니다.GetHostAddresses 다른 오류 코드

지금은 문자 그대로 복사 다소 큰 프로젝트에 코드를 붙여,하지만 난 내 테스트 프로젝트에서와 동일한 호스트 이름을 입력 이번에는, 그것은 SocketException을 발생하지만, 메시지가 The requested name is valid, but no data of the requested type was found

로 설정 두 스택 추적은 각 프로그램에서 동일하지만 첫 번째 오류는 WSAHOST_NOT_FOUND이고 두 번째 오류는 WSANO_DATA입니다.

나는 수 그냥 내 자신의 오류 메시지가 출력하지만, 나는 그것이 다른 오류 매번 던지고 이유를 알고 싶습니다? 코드에는 차이점이 없습니다. 또한

, 아무리 내가 각 프로그램을 실행 횟수, 그들은 각각 같은 오류 메시지가 출력 지킬 것으로 보인다. 번갈아 가거나 다른 것이 아닙니다.

============================================= ==============================

이 잘 나는 문제의 원인이 있었는지 알아 냈어.
Pcap.Net을 참조로 추가하여 내 프로젝트에 포함했습니다. using PcapDotNet.Core;
어쨌든, 내가 주석 처리 한 후에 Dns.GetHostAddresses이 올바른 예외를 던지고 있습니다.

는 그처럼 행동하고, 어떻게 극복하는 방법, 즉 좋은 것 왜 사람이 말해 수 있다면.

+1

작은 테스트 프로젝트와 다른 프로젝트가 같은 버전의 .NET에 구축되어 있습니까? – dgvid

+0

@dgvid 그래. (15chars) – Josh

+2

두 프로젝트가 동일한 machine \ network 도메인에서 실행되고 있습니까?첫 번째 오류는 호스트를 전혀 찾을 수 없다는 것을 의미합니다. 두 번째 오류는 호스트가 있지만 불완전한 데이터가 있음을 나타냅니다 (즉, A 레코드가 정의되지 않음). –

답변

2

SocketExceptionGetHostAddresses에 발생합니다 많은 이유가있다. WSA_NODATA의 경우 DNS에 항목이 있음을 나타냅니다. IP 주소는 없습니다 (즉, A 레코드 없음). DNS 서버에 연결할 수 없지만 데이터가 캐시 된 경우 다른 오류가 발생할 수 있습니다. 또는 DNS 서버에 연결할 수없고 데이터가 캐시되지 않은 경우 다른 오류가 발생할 수 있습니다. 등등. 불행히도 GetHostAddresses은 하나의 예외 유형으로 모든 오류를 래핑합니다. 각 유형의 오류에 대해 다른 작업을 수행하려는 경우 관련 속성을 SocketException에서 확인해야합니다. 단지 "작동하지 않는다"는 것을 감지하기 원한다면 점검 할 필요가 없습니다. 그러나 SocketException 메시지가 오류에 따라 다르므로 Message을 사용하지 않는 것이 좋습니다. 말할 것도없고, 다른 언어 버전의 Windows에서 번역 될 것입니다. 따라서이 메시지를 제외하고 나머지 응용 프로그램이 영어 인 경우 이상하게 보일 수 있습니다.

기술적으로는 다음 오류 중 하나가 수 : WSANOTINITIALIZED, WSAENETDOWN, WSAHOST_NOT_FOUND, WSATRY_AGAIN, WSANO_RECOVERY, WSANO_DATA, WSAEINPROGRESS, WSAEFAULTWSAEINTR을. 일부는 극히 드물기는하지만.

IPv6 또는 IPv4가 재생 중인지 여부에 따라 다른 메시지가 표시 될 것입니다.