问题的一点背景:
我最近对 Microsoft 和套接字绑定有过一次濒死体验。我正在测试生产代码,其中一台测试 PC 一直失败。我最终建议该函数存在错误,这bind()
是最古老的函数之一。
我提交了错误(请参阅CAsyncSocket Create 的绑定实现在 Visual Studio 的开发人员社区反馈论坛中有一个错误),但被移交给了 Windows 团队(请参阅他们的反馈中心中的“__imp_bind 实现有一个长期存在的情境错误”) ,谁从来没有做过任何事情。
由于我无法调试bind()
,而且微软拒绝提供帮助,经过 2 周的开发工作后,我最终发现,有问题的测试机器启用了 Hyper-V,而我的接口解析代码正在获取这个虚假AF_INET
地址并对其进行解析的真实IP地址。
我不能指望我的客户仅仅为了运行我的软件而关闭不需要的 Hyper-V 功能,因此我需要使我的解析代码更加精细。
我的问题:
我需要做的是能够获取特定地址的详细名称,例如 for ipconfig /all
。我可以看到其他人问过这个问题,比如 Ivan 的如何确定接口名称和 tez 的Linux 获取所有网络接口名称。Ivan 的答案是使用getsockname()
,tez 的答案是使用if_nameindex()
. 其中任何一个都不会返回详细的接口名称,如ipconfig
.
那么,有人知道那会是什么函数调用吗?