2012-02-21 5 views
1

제 코드에서 다음과 같이 코드를 사용하고 있습니다.EAI_AGAIN에서 getaddrinfo()가 계속 실패합니다

do 
{ 
    r = getaddrinfo(host, service, &hints, ret); 
} 
while (r == EAI_AGAIN); 

getaddrinfo() 테스트가 계속 실패 할 경우 루프가 제대로 종료되지 않습니다.

코드를 향상시키는 방법이 있습니까? 루프 횟수를 세는 카운터를 사용할 수 있습니까?

또한 "EAI_AGAIN"이 (가) getaddrinfo() 호출에 의해 반환 된 모든 이유에 대해 알려 주시기 바랍니다.

+0

메모리 누수가 있습니까? –

+3

오류 의미 : 이름 확인에 일시적인 오류가 발생했습니다. 그 일이 왜 우리에게 일어날 지 알기가 불가능합니다. 우리는 당신이 전달하는 매개 변수에 대해서는 아무것도 모른다. 바쁜 루프에서 이것을 호출하면 결과가 나오지 않을 것입니다. –

+0

이것은 대부분의 DNS 서버에 도달 할 수 없거나 DNS 서버가 잘못 구성되었음을 의미합니다. – Nemo

답변

0

여기는 분명히 야생의 추측입니다.

우리는 또한 약간 낮은 파워의 임베디드 시스템에서 이것을보고 있습니다.

저는 (우리의 경우 dnsmasq)가 별도의 프로세스로 실행되고 있다고 가정합니다. 이유는 무엇입니까 (아마도 우리가 꼬리를 쫓는 서클에서 뛰고 있기 때문에) 충분한 리소스 (CPU/RAM /)를 얻지 못했을 것입니다. ..) 그 직업을.

솔루션에서의 과장된 추측은 그 단단한 루프에 잠을 자고 DNS 캐싱 마법을 자신의 작업에 필요한 리소스에 맡기는 것일 수 있습니다.

작동하는지 알려 드리겠습니다.

관련 문제