Как использовать gethostbyname_r в Linux - PullRequest
4 голосов
/ 29 июня 2011

В настоящее время я использую небезопасную версию gethostbyname , которая очень проста в использовании. Вы передаете имя хоста, и оно возвращает мне структуру адреса. Похоже, что в среде MT эта версия приводит к сбою моего приложения, поэтому я пытаюсь заменить его на gethostbyname_r . Найти гугл пример использования или любую хорошую документацию очень сложно.

Кто-нибудь использовал этот gethostbyname_r метод? есть идеи ? Как его использовать и как обрабатывать ошибки, если таковые имеются.

1 Ответ

4 голосов
/ 29 июня 2011

Функция использует временный буфер, предоставленный вызывающей стороной. Хитрость заключается в обработке ошибки ERANGE.

int rc, err;
char *str_host;
struct hostent hbuf;
struct hostent *result;

while ((rc = gethostbyname_r(str_host, &hbuf, buf, len, &result, &err)) == ERANGE) {
    /* expand buf */
    len *= 2;
    void *tmp = realloc(buf, buflen);
    if (NULL == tmp) {
        free(buf);
        perror("realloc");
    }else{
        buf = tmp;
    }
}

if (0 != rc || NULL == result) {
    perror("gethostbyname");
}

EDIT

В свете последних комментариев, я думаю, что вы действительно хотите это getaddrinfo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...