Показать сообщение отдельно

  #7  
Старый 28.01.2010, 16:18
Gar|k
Постоянный
Регистрация: 20.03.2009
Сообщений: 564
С нами: 9023100

Репутация: 395


По умолчанию

slesh функция хороша и интелектуально понятно, но есть два факта
1) host ведь можно указать строкой "127.0.0.1"

Цитата:
Сообщение от Самоучитель игры на WINSOCK (c)Крис Касперски  
sockaddr_in dest_addr;
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(PORT);
HOSTENT *hst;

// преобразование IP адреса из символьного в сетевой формат
if (inet_addr(SERVERADDR) != INADDR_NONE)
dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
else
{
// попытка получить IP адрес по доменному имени сервера
if (hst = gethostbyname(SERVERADDR))
// hst->h_addr_list содержит не массив адресов,
// а массив указателей на адреса
((unsigned long *)&dest_addr.sin_addr)[0] =
((unsigned long **)hst->h_addr_list)[0][0];
else
{
printf("Invalid address %s\n", SERVERADDR);
closesocket(my_sock);
WSACleanup();
return -1;
}
}
2) gethostbyname - у одного адреса может быть несколько ip адресов на то и массив в структуре HOSTENT

Код:
struct hostent
{
    char FAR * h_name;            // официальное имя узла
    char FAR * FAR * h_aliases;   // альтернативные имена узла (массив строк)
    short h_addrtype;             // тип адреса
    short h_length;               // длина адреса (как правило AF_INET)
    char FAR * FAR * h_addr_list; // список указателей на IP-адреса
                                  // ноль - конец списка
};
хотя и я ленюсь это учитывать
 
Ответить с цитированием