Я использую системный вызов getaddrinfo, и он возвращает -2. Я пытаюсь понять, что это за ошибка, и получить то, что «имя или услуга неизвестны». имя - это мое имя хоста, и я уверен, что это известно. но служба - это номер, который изменяется от запуска до запуска. как я могу узнать, что я привожу правильный параметр?Системный вызов Linux: getaddrinfo return -2
мой код:
int GetSockPeerIPs(int sock, AddressList &addresses, int &error,
int family, bool zeroport)
{
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;
}
memset(&hints, 0, sizeof(hints));
if (ATNetworkTool::AF_XINETX == family) {
hints.ai_family = PF_UNSPEC;
} else {
hints.ai_family = family;
}
hints.ai_socktype = SOCK_STREAM;
if (0 != (error = getaddrinfo(hbuf, pbuf, &hints, &paddrp))) {
return -1;
}
addresses.clear();
for (paddr = paddrp; paddr; paddr = paddr->ai_next) {
if (ATNetworkTool::AF_XINETX == family) {
if (!ATAddress::saIsInet(paddr->ai_addr)) {
continue;
}
}
if (zeroport) {
addresses.insert(ATAddress(paddr->ai_addr, 0));
} else {
addresses.insert(paddr->ai_addr);
}
}
freeaddrinfo(paddrp);
return 0;
}
спасибо! gln
Показать ваш код, пожалуйста. – 2010-12-09 07:45:53
Обратите внимание, что если getaddrinfo() и друзья терпят неудачу, вы можете вызвать [gai_strerror()] (http://pubs.opengroup.org/onlinepubs/009695399/functions/gai_strerror.html) код возврата, чтобы получить текстовое сообщение об ошибке , например `printf (" getaddrinfo() не удалось:% s \ n ", gai_strerror (ошибка));` в вашем случае – nos 2011-11-01 13:45:45