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