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