2010-12-14 3 views
-1

В моем приложении C++ я использую getnameinfo и он возвращает EAI_AGAIN - что вызывает эту ошибку?Системный вызов Linux getname info return EAI_AGAIN

struct sockaddr_storage ss; 
socklen_t salen = sizeof(ss); 
struct sockaddr *sa; 
struct addrinfo hints, *paddr, *paddrp; 

sa = (struct sockaddr *)&ss; 

if (getpeername(sock, sa, &salen) != 0) { 
    error = errno; 
    return -1; 
} 

char hbuf[NI_MAXHOST]; 
char pbuf[NI_MAXSERV]; 
if (0 != (error = getnameinfo(sa, salen, 
        hbuf, sizeof(hbuf), 
        pbuf, sizeof(pbuf), 
        0))) { 
    return -1;//here it returns, the error is -3=EAI_AGAIN 
} 
+0

но что может вызвать это? мое приложение не может ждать! – gln

ответ

2

По getnameinfo:

[EAI_AGAIN] Имя не может быть решена в это время. Будущие попытки могут преуспеть.

Наиболее вероятной причиной может быть какой-то тайм-аут во время поиска DNS.

+0

Итак, что я могу сделать, чтобы исправить это? – gln

+0

Будущие попытки не удались – gln

+0

Вам просто нужно жить с возможностью сбоя DNS-запросов. – cmeerw