Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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.034 c
6-1084955917
Olfi
2004-05-19 12:38
2004.07.18
настройка сети через реестр


1-1088626949
dido
2004-07-01 00:22
2004.07.18
Почему прячется форма?


14-1088169312
Samael6
2004-06-25 17:15
2004.07.18
Вопрос по РНР. Может кто-нибудь помочь?


1-1089000045
Pavelkq
2004-07-05 08:00
2004.07.18
Сохранение массива в файл.


1-1089000676
newver
2004-07-05 08:11
2004.07.18
Передача данных в программу.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский