Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.18;
Скачать: CL | DM;

Вниз

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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.068 c
14-1088434288
nick-from
2004-06-28 18:51
2004.07.18
Владельцам КПК (Москва)


14-1088680831
ricks
2004-07-01 15:20
2004.07.18
Помогите найти музыку


3-1087905051
Эдик
2004-06-22 15:50
2004.07.18
Select, Dbase, BDE, кодировка...


1-1089179521
Beton
2004-07-07 09:52
2004.07.18
Повторный запуск приложения


4-1086248300
Miha
2004-06-03 11:38
2004.07.18
COM порт