只是想知道是否有其他人发现过这个:
在运行我们软件的某些用户的计算机上,偶尔调用Win32 winsock gethostbyname
失败,错误代码为11004。
对于gethostbyname的参数,我传递了gethostname
的结果。
现在文档说11004是WSANO_DATA。没有任何描述似乎是相关的(如果您传入IP6地址,就会发生这种情况,但正如我所说,我传递的是主机名)。
更有趣的是,MSDN建议这种组合(gethostname
后跟gethostbyname
)永远不会失败,即使没有IP地址也不会失败(在这种情况下,它只会返回空列表) IPs)。以下是gethostname MSDN条目的引用:
...保证返回的名称将被gethostbyname和WSAAsyncGetHostByName成功解析。
它只会在从休眠状态恢复后,在网络重启的那段短暂时间内发生,而且只在Vista / 7上发生(我只在Vista和7上看过它)。
我的一个理论是它与IP6有关。也许在短时间内,网络报告IP6地址,但不是相应的IP4地址(我很确定所有客户端机器都是双IP堆栈,但我可能错了)。
我尝试通过关闭网卡来重现(不强制使用IP地址)并且无法重现。
之前有人见过吗?
有什么想法吗?
约翰
答案 0 :(得分:1)
我认为你被一个边缘案件所困扰。
在一天结束时,像hibernate这样的东西是先进的东西 - 将PC恢复到其确切状态并继续,好像什么也没发生过一样。这一切都很好,但有些东西不会幸存下来,比如任何期望回复的网络连接,以及任何严重的低级别 - 你不能设置我只能读取的寄存器CPU。
我建议您与Microsoft联系,询问他们是否知道这一点。如果它适用于其他操作系统,他们很可能会有兴趣修复它为7 / Vista。只是准备交出一个二进制文件,这样他们就可以无限制地测试它。