Сбой gethostbyname для локального имени хоста после выхода из спящего режима (Vista+7?)
Просто интересно, если кто-то еще заметил это:
На компьютерах некоторых пользователей, на которых запущено наше программное обеспечение, иногда вызывается Win32 Win32 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-адресов), и не смог воспроизвести.
Кто-нибудь видел это раньше?
Есть идеи?
Джон
1 ответ
Я думаю, что вас укусил крайний случай.
В конце концов, делать что-то наподобие hibernate - сложная задача - восстановить ПК до его точного состояния и продолжить, как будто ничего не произошло. Это все хорошо, но некоторые вещи не выжили бы, такие как любые сетевые подключения, которые ожидали ответа, и любые регистры с серьезным низким уровнем "Вы не можете установить меня только для чтения меня" в ЦПУ.
Я предлагаю вам связаться с Microsoft и спросить их, знают ли они об этом. Если это работает для других ОС, они, скорее всего, будут заинтересованы в исправлении этого для 7/Vista. Просто будьте готовы сдать двоичный файл, чтобы они могли проверить его до бесконечности.