Я пишу клиентскую программу, связывающуюся через TCP/IP–сеть с сервером.
Время от времени я получаю означенную в заголовке ошибку EAI_SERVICE. Почему так происходит?
Вызов функции выглядит, например, так:
Код: Выделить всё
addrinfo _sock_args;
memset (&_sock_args, 0, sizeof(_sock_args));
_sock_args.ai_family = AF_UNSPEC;
_sock.addr.ai_socktype = SOCK_STREAM;
addrinfo* _sock_addrs;
getaddrinfo("localhost", "7777", &_sock_args, &_sock_adrrs);В качестве имени передаётся имя из /etc/hosts, имя DNS или имя netbios. Обычно функция успешно возвращает список адресов или EAI_NONAME, если адрес не найден; но иногда появляется именно ошибка EAI_SERVICE. На одной из машин эта ошибка появляется постоянно, и невозможно работать, на соседних машинах из того же сегмента сети эта ошибка появляется исчезающе редко, и достаточно вызвать getaddrinfo ещё один раз (в цикле while, не меняя ни единого параметра), чтобы получить правильный ответ.
На всех компьютерах установлена Ubuntu 10.10 из одного и того же локального зеркала. По задаваемому имени сервера целевую машину можно успешно попинговать со всех компьютеров–клиентов.
С чем может быть связано такое появление ошибки?