Сбой gethostbyname для локального имени хоста после выхода из спящего режима (Vista + 7?) - PullRequest
0 голосов
/ 28 января 2010

Просто интересно, заметил ли кто-нибудь это:

На некоторых компьютерах пользователей, на которых запущено наше программное обеспечение, время от времени вызов 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

1 Ответ

1 голос
/ 31 марта 2010

Я думаю, что вас укусил крайний случай.

В конце концов, делать что-то наподобие hibernate - это продвинутая вещь - восстановление ПК до его точного состояния и продолжение, как будто ничего не произошло. Это все хорошо, но некоторые вещи не выжили бы, такие как любые сетевые подключения, которые ожидали ответа, и любые регистры с серьезным низким уровнем «Вы не можете установить меня только для чтения меня» CPU.

Я предлагаю вам связаться с Microsoft и спросить их, знают ли они об этом. Если это работает для других ОС, они, скорее всего, будут заинтересованы в исправлении этого для 7 / Vista. Просто будьте готовы сдать двоичный файл, чтобы они могли проверить его до бесконечности.

...