提问人:Daniel 提问时间:5/22/2019 更新时间:5/22/2019 访问量:49
DeleteIPAddress 函数有效,但会触发断开连接
DeleteIPAddress function works, but triggers a disconnection
问:
我有一个小应用程序,它使用 IP Helper 的 AddIPAddress 函数临时添加多个 (3-4) 个 IP 地址。几秒钟 (2-3) 后,它使用 DeleteIPAddress 函数删除这些地址。
函数 DeleteIPAddress 有效且不返回任何错误,但有时(每 3 或 4 轮添加和删除一次)它会在接口上触发断开连接事件(与断开和连接电缆完全相同)。
我想避免这些断开连接,因为它们会切断在同一界面中完成的任何通信,但我在文档中看不到有关此行为的任何内容。
这是我添加每个 IP 地址的方式:
auto dwRetVal = AddIPAddress(iaIPAddress, iaIPMask, _idx, &NTEContext, &NTEInstance);
if (dwRetVal == ERROR)
{
std::cout << "Error on AddIPAddress" << std::endl;
}
这就是我删除它们的方式:
auto dwRetVal = DeleteIPAddress(ipContext);
if (dwRetVal != NO_ERROR)
{
std::cout << "Error on DeleteIPAddress" << std::endl;
}
我错过了什么吗?
答:
0赞
Anders
5/22/2019
#1
您没有正确检查返回值,您应该测试 。AddIPAddress
!= ERROR_SUCCESS
如果失败,则不应调用 delete。AddIPAddress
评论
0赞
Daniel
5/22/2019
谢谢。但我认为情况并非如此,因为如果我从 GetAdaptersInfo 获取上下文,也会发生这种情况。此外,在使用 AddIPAddress 后,我可以看到接口已正确添加地址。此外,如果我使用无效的上下文(如果 AddIPAddress 失败),我会从 DeleteIPAddress 收到错误。无论如何,谢谢你的提示,我也会改变它。
0赞
Anders
5/22/2019
我不知道这是否会解决问题,但由于您发布的代码有问题,我不得不添加此答案。ipContext 是表或类似内容的偏移量,理论上堆栈中的随机值可能会意外删除某些内容。
上一个:LAN中的零配置时间同步
评论