Как получить IP адрес хоста через ф-цию getaddrinfo ?

Тема в разделе "WASM.NETWORKS", создана пользователем gershkovich, 6 июл 2006.

  1. gershkovich

    gershkovich New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2006
    Сообщения:
    97
    Пишу библ. для работы с почтой.

    Для конекта к серверу надо получить его IP адрес.

    Микрософт рекомендует делать это ф-цией getaddrinfo
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/getaddrinfo_2.asp

    эта ф-ция возвращает структуру addrinfo
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/addrinfo_2.asp

    которая в свою очередь содержит структуру sockaddr
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/sockaddr_2.asp

    Вот тут непонятки - возможно три варианта структур sockaddr_in, sockaddr_in6 и sockaddr_in6_old

    И ни где на написано как определить какая структра вернулась!
    Порылся в Гугле - ничего определенного - в основном перепечатки с МСДН.

    Кто сталкивался ?
    Заранее спасибо.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    это зависит от того, какой протокол используется при вызове getaddrinfo.
    если нужен IP, используй функцию gethostbyname и sockaddr_in
     
  3. gershkovich

    gershkovich New Member

    Публикаций:
    0
    Регистрация:
    14 фев 2006
    Сообщения:
    97
    Микрософт настоятельно рекомендует не юзать эту ф-цию
    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/getaddrinfo_2.asp

    Я вот подумал : ф-ция getaddrinfo возвращает sockaddr (один из трех).
    А ф-ция connect требует как параметр тоже структуру sockaddr
    Т.е. искать адрес наверно и не понадобится!
    Просто передать указатель от одной к другой.
    Я думаю эти две ф-ции как-нить разберутся между собой :)

    Правда, я еще не пробовал этот вариант.
     
  4. Son of God

    Son of God New Member

    Публикаций:
    0
    Регистрация:
    11 сен 2005
    Сообщения:
    125
    При работе с IP версии 4 используется структура sockaddr_in.
    При работе с IP версии 6 используются структуры sockaddr_in6 и sockaddr_in6_old.
    Следовательно, функции будут принимать и возвращать sockaddr_in (если ты не работаешь с IPv6).