Pergunta

Gostaria de saber se mais alguém percebeu isso:

Nas máquinas de alguns usuários que executam nosso software, ocasionalmente a chamada para Win32 Winsock gethostbyname falha com o código de erro 11004.

Para o argumento gethostbyname, estou passando o resultado de gethostname.

Agora os documentos dizem que 11004 é WSANO_DATA.Nenhuma das descrições parece ser relevante (ocorre se você passar um endereço IP6, mas como eu disse, estou passando um nome de host).

Ainda mais interessante é que o MSDN sugere que esta combinação (gethostname seguido pela gethostbyname) nunca deve falhar, nem mesmo se não houver endereço IP (nesse caso, retornaria apenas uma lista vazia de IPs).Aqui está a citação da entrada gethostname do MSDN:

...é garantido que o nome retornado será analisado com êxito por gethostbyname e WSAAsyncGetHostByName.

Isso só acontece depois de sair da hibernação, naquele curto período em que a rede está reiniciando, e somente no Vista/7 (bem, eu só vi isso no Vista e 7).

Uma teoria que eu tinha era que estava relacionado ao IP6.Talvez por um curto período a rede relate um endereço IP6, mas não o endereço IP4 correspondente (tenho certeza de que todas as máquinas clientes são pilhas IP duplas, mas posso estar errado).

Tentei reproduzir desligando minha placa de rede (para não forçar nenhum endereço IP) e não consegui reproduzir.

Alguém já viu isso antes?

Alguma ideia?

John

Foi útil?

Solução

Acho que você foi mordido por um caso extremo.

No final das contas, fazer algo como hibernar é algo avançado - restaurar um PC ao seu estado exato e continuar como se nada tivesse acontecido.Está tudo muito bem, mas algumas coisas não terão sobrevivido, como quaisquer conexões de rede que esperavam uma resposta e quaisquer registros de nível muito baixo do tipo que você não pode definir-me-apenas-leia-me no CPU.

Sugiro que você entre em contato com a Microsoft e pergunte se eles sabem disso.Se funcionar para outros sistemas operacionais, eles provavelmente estarão interessados ​​em consertá-lo para o 7/Vista.Esteja preparado para entregar um binário para que eles possam testá-lo ad infinitum.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top