我有三个网络接口(在我的Window 7下)
192.168.0.2 - real network card (interface id: 10)
192.168.180.1 - vmware adapter 1 (interface id: 21)
192.168.139.1 - vmware adapter 2 (interface id: 22)
我有UDP套接字(AF_INET),它没有通过bind调用绑定到任何地址。
我尝试将数据报发送到239.255.255.250。正如我在Wireshark中看到的那样,只有192.168.139.1源addr用于通过192.168.139.0/24网络发送数据报。
我想我需要告诉winsock它必须从哪个接口发送数据报并尝试调用setsockopt:
UINT adapterId = 10;
setsockopt(sock, IPPROTO_IP, IP_MULTICAST_IF, (char*)&adapterId, sizeof(adapterId));
但我在这里收到了10049(WSAEADDRNOTAVAIL)错误。
如何通过我的真实网络或多宿主主机的所有网络发送数据报?
很久以前我的代码(但是没有setsockopt调用)在WinXP下运行正常,但我记不清了,那个系统有一个网络适配器还是多个。
答案 0 :(得分:2)
你走在正确的轨道上。您必须按照上面的代码依次遍历通过每个NIC发送的所有NIC。 10049是由指定错误的地址或对该主机不是本地的地址引起的。在这种情况下,您错误地传递了适配器ID而不是IP地址。