在具有多个网卡的机器上,如果想要从每个网卡发送UDP数据,一般的做法是:
针对每张网卡的每个IP都绑定一个SOCKET,然后发送的时候针对每个SOCKET都发送一次。
但是如果你要发送多播数据,在有的系统上(我所测试的Win2K),即使通过每个IP都发送了多播包,但是系统会自动选择一张默认的网卡来发送你的多播包。
这是你可以通过设置下面这个Socket选项来更改这种默认行为:
unsigned long addr = inet_addr("172.22.102.73");
setsockopt((*iter_Shadowtable_ip)->multicast_Socket.socket, IPPROTO_IP, IP_MULTICAST_IF, (char *)&addr, sizeof(addr));
其中,"addr"就是你想要发送多播包的网卡的一个IP。
你只需要在每次发送多播包之前都调用上面两句就行了。