使用WSAIoctl函数计算网络接口(WIN32 API)

时间:2009-05-14 12:00:54

标签: c++ c winapi

我正在尝试使用WSAIoctl函数列出可用的接口。我必须传入一个缓冲区来保存完整的列表。我想在分配内存以保存接口细节之前得到接口的计数,但如果我传入一个NULL指针,则调用失败(我没有得到有效的计数返回)。有什么方法可以计算内存吗?

背景是我在Windows机器上开始加载进程/线程,它们都连接到单个服务器。我希望服务器将这些单独的连接视为来自不同的IP地址,并且我已向测试计算机添加了一些别名以允许此(批量)。 WSAIoct可以正确找到我添加的所有内容。

干杯...

1 个答案:

答案 0 :(得分:1)

来自WSAIoctl的msdn documentation

  

注意:如果输出缓冲区不是   大到足以包含地址   列表,SOCKET_ERROR作为返回   这个IOCTL的结果和   WSAGetLastError返回WSAEFAULT。该   所需的大小,以字节为单位   输出缓冲区在。中返回   lpcbBytesReturned参数在此   案件。请注意WSAEFAULT错误代码是   如果lpvInBuffer也返回   lpvOutBuffer,或lpcbBytesReturned   参数未完全包含   在用户地址的有效部分   空间。

所以你必须两次调用WSAIoctl函数。第一次使用任意缓冲区,然后检查文档中提到的错误代码。然后使用lpcbBytesReturned中返回的大小来分配缓冲区并再次调用WSAIoctl函数。