我正在尝试使用WSAIoctl函数列出可用的接口。我必须传入一个缓冲区来保存完整的列表。我想在分配内存以保存接口细节之前得到接口的计数,但如果我传入一个NULL指针,则调用失败(我没有得到有效的计数返回)。有什么方法可以计算内存吗?
背景是我在Windows机器上开始加载进程/线程,它们都连接到单个服务器。我希望服务器将这些单独的连接视为来自不同的IP地址,并且我已向测试计算机添加了一些别名以允许此(批量)。 WSAIoct可以正确找到我添加的所有内容。
干杯...
答案 0 :(得分:1)
来自WSAIoctl的msdn documentation:
注意:如果输出缓冲区不是 大到足以包含地址 列表,SOCKET_ERROR作为返回 这个IOCTL的结果和 WSAGetLastError返回WSAEFAULT。该 所需的大小,以字节为单位 输出缓冲区在。中返回 lpcbBytesReturned参数在此 案件。请注意WSAEFAULT错误代码是 如果lpvInBuffer也返回 lpvOutBuffer,或lpcbBytesReturned 参数未完全包含 在用户地址的有效部分 空间。
所以你必须两次调用WSAIoctl函数。第一次使用任意缓冲区,然后检查文档中提到的错误代码。然后使用lpcbBytesReturned中返回的大小来分配缓冲区并再次调用WSAIoctl函数。