我运行 Ubuntu 12.04,我目前正在编写 C++ 代码来创建一个 UDP 套接字,它使用sendto将数据包发送到各个目的地。现在碰巧我的笔记本电脑有一个wlan0和一个eth0接口。如果我将它绑定到其中任何一个,使用 IP 地址和 SO_BINDTODEVICE 选项,根据目标地址,sendto仍将决定使用适合他的另一个接口。
具体来说,如果我将一个 UDP 套接字绑定到 eth0 接口,它的 ip 地址和一些端口,然后我将一个数据包发送到另一台笔记本电脑(本地,只有 wifi 访问),它将决定使用我的 wlan0 接口。
我知道这种行为有优点,但我希望能够将其关闭,即我希望能够对套接字说它应该只使用我分配给它的一个接口。
建议?
编辑:
struct sockaddr_storage sa = address;
fd = socket(address.get_family(), SOCK_DGRAM, 0);
char *devname = "wlan0";
setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, devname, strlen(devname));
bind(fd, (sockaddr*)&sa, len);