Сбой 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. Просто будьте готовы сдать двоичный файл, чтобы они могли проверить его до бесконечности.

Другие вопросы по тегам