Форум: "Сети";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
ВнизWinSock: gethostbyaddr vs getnameinfo Найти похожие ветки
← →
Ahven © (2004-05-19 19:05) [0]Коллеги, дело вот в чем:
1. Надо на сервере определить имя подключившевося к нему клиента. Т.е. accept(fSocket, @kClientAddress, @kLength) заполняет kClientAddress и из него надо найти имя клиента в виде типа host.domain.ru.
2. Есть ф-я gethostbyaddr, кот. делает то, что надо. Но в MSDN пишут, что она deprecated и надо пользоваться getnameinfo. Кроме того, у gethostbyaddr есть баг, описанный самими MS - на Win2000
не всегда работает корректно, надо ставить SP4 - тоже, в общем, не в пользу ф-ии.
3. Соотв., есть ф-я getnameinfo. И вроде бы она описана в MSDN в разделе WinSock2. Но, как сами они пишут в
What"s New for Windows Sockets (здесь):
The Microsoft® Windows® Server 2003 family introduces new Windows Sockets programming elements.
---cut---
The following are new Windows Sockets functions:
---cut---
getnameinfo
Ну и вопросы появились:
1. Это что, только на Server 2003 будет работать?
2. В какой вообще dll эта ф-я, откуда её брать-то? По крайней мере, в wsock32.dll нет, проверил.
3. Можно ли вообще на эту ф-ю положиться? В смысле, что если на компе установлен WinSock2, то getnameinfo всегда будет в одной и той же dll и всегда будет работать, а не только на Server 2003?
Кто-нибудь пользовался этой ф-ей?
← →
Ahven © (2004-05-19 19:27) [1]Извините, ссылка покоцалась, вместо "здесь" читать
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/wcemain4/html/cmgrfws2module.asp
← →
Verg © (2004-05-19 19:29) [2]Всегда пользовался gethostbyaddr и никаких багов не замечал. Если в каких-то случаях она не могла определить имя хоста по IP, то это всегда была проблема c DNS.
Альтернатива? - DNSAPI
Requirements
Windows NT/2000/XP: Included in Windows 2000 and later.
Header: Declared in Windns.h.
Library: Use Dnsapi.lib.
см. http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dns/dns/dnsquery.asp
← →
Verg © (2004-05-19 19:33) [3]Так ты про какую версию ОС говоришь?
Про Microsoft Windows CE .NET 4.2?
← →
Ahven © (2004-05-19 19:34) [4]Спасибо.
>Всегда пользовался gethostbyaddr и никаких багов не замечал
Ну, если интересно, вот:
http://support.microsoft.com/default.aspx?scid=kb;en-us;308512
← →
Ahven © (2004-05-19 19:44) [5]1. В какой именно точке своего поста говорю? Я вроде бы все версии, о каких гворил, называл поименно:
> Коллеги, дело вот в чем:
>
> 1. Надо на сервере определить имя подключившевося к нему
> клиента. Т.е. accept(fSocket, @kClientAddress, @kLength)
> заполняет kClientAddress и из него надо найти имя клиента
> в виде типа host.domain.ru.
>
> 2. Есть ф-я gethostbyaddr, кот. делает то, что надо. Но
> в MSDN пишут, что она deprecated и надо пользоваться getnameinfo.
> Кроме того, у gethostbyaddr есть баг, описанный самими MS
> - на Win2000
> не всегда работает корректно, надо ставить SP4 - тоже, в
> общем, не в пользу ф-ии.
>
> 3. Соотв., есть ф-я getnameinfo. И вроде бы она описана
> в MSDN в разделе WinSock2. Но, как сами они пишут в
> What"s New for Windows Sockets (здесь):
>
> The Microsoft® Windows® Server 2003 family introduces new
> Windows Sockets programming elements.
> ---cut---
> The following are new Windows Sockets functions:
> ---cut---
> getnameinfo
>
> Ну и вопросы появились:
>
> 1. Это что, только на Server 2003 будет работать?
> 2. В какой вообще dll эта ф-я, откуда её брать-то? По крайней
> мере, в wsock32.dll нет, проверил.
> 3. Можно ли вообще на эту ф-ю положиться? В смысле, что
> если на компе установлен WinSock2, то getnameinfo всегда
> будет в одной и той же dll и всегда будет работать, а не
> только на Server 2003?
> Кто-нибудь пользовался этой ф-ей?
Если вопрос относится к "всегда будет работать", то, конечно, без особой экзотики - 2000, XP, 98 - в этом духе.
← →
Verg © (2004-05-19 19:49) [6]Ссылка в [1]! Посмотри на что она показывает...
← →
Ahven © (2004-05-19 20:00) [7]Да, верно. Не туда показывает. Вот правильно:
http://msdn.microsoft.com/library/en-us/winsock/winsock/what_s_new_for_windows_sockets_2.asp
← →
Verg © (2004-05-19 20:17) [8]
> [7] Ahven © (19.05.04 20:00)
Короче. gethostbyaddr - ф-ция пришедшая еще с Berkeley реализаций с незапамятных времен, и входящиая во все реализации, как Windows, так и Linux (который даже не Berkeley-основанный). Если где-то, при каких-то реализациях, каких-то версий или ревизий в ее реализаций бывали обнаружены какие-то баги при каких-то условиях, то они немедленно исправлялись соответсвующими апдейтами, сервиспаками или патчами, так как - "святое не трожь" :))
Но, если хочешь "дуть на воду" - твое право.
У тебя, конкретно, какие возникали проблемы при использовании ее?
← →
Ahven © (2004-05-19 20:24) [9]С тем, что баги исправлялись - абсолютно согласен. Но с другой стороны, незапамятность никогда не была священной коровой для MS :)
Проблема была и именно такая, как описано в ссылке [4].
Дуть на воду меня заставило то, что прочел в описании gethostbyaddr:
Note The gethostbyaddr function has been deprecated by the introduction of the getnameinfo function. Developers creating Windows Sockets 2 applications are urged to use the getnameinfo function instead of the gethostbyaddr function.
← →
Verg © (2004-05-19 20:39) [10]
> Но с другой стороны, незапамятность никогда не была священной
> коровой для MS
Так давай же не уподобляться :))
1. "Один старый баг лучше двух новых" (С) не помню чей.
2. Да не перемудри.
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2004.07.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.035 c