Просто интересно, заметил ли кто-нибудь еще это:
На некоторых пользовательских компьютерах с нашим программным обеспечением иногда вызов Win32 winsock gethostbyname
завершается с ошибкой с кодом 11004.
В качестве аргумента для gethostbyname я передаю результат из gethostname
.
Теперь документы говорят, что 11004 — это WSANO_DATA. Ни одно из описаний не кажется уместным (это происходит, если вы передаете адрес IP6, но, как я уже сказал, я передаю имя хоста).
Еще более интересно то, что MSDN предполагает, что эта комбинация (gethostname
, за которой следует gethostbyname
) никогда не должна давать сбой, даже если нет IP-адреса (в этом случае он просто вернет пустой список IP-адресов). Вот цитата из записи MSDN gethostname:
... гарантируется, что возвращенное имя будет успешно проанализировано gethostbyname и WSAAsyncGetHostByName.
Это всегда происходит только после выхода из спящего режима, в тот короткий период, когда сеть перезагружается, и только в Vista/7 (ну, я видел это только в Vista и 7).
Одна из теорий, которые у меня были, заключалась в том, что это связано с IP6. Возможно, в течение короткого периода сеть сообщает адрес IP6, но не соответствующий адрес IP4 (я почти уверен, что все клиентские машины имеют двойной стек IP, но я могу ошибаться).
Я попытался воспроизвести, отключив сетевую карту (чтобы не использовать IP-адреса), и не смог воспроизвести.
Кто-нибудь видел это раньше?
Любые идеи?
Джон
gethostname
не говорится, что он никогда не выйдет из строя, только то, что в случае успеха его вывод сможет быть анализирован с помощьюgethostbyname
. 2) Ошибкаgethostbyname
не означает, что ему не удается разобрать свой ввод (который вы отправляете изgethostname
). Возможно, он успешно разбирает ввод, но не может преобразовать имя в адрес. - person nobody   schedule 31.03.2010