可能重复:
Using a C++ TCP client socket on a specific network interface Linux/Unix
我想在Ubuntu上编写套接字程序,我的PC中有很多网络设备。 该程序将通过DeviceA向ServerA发送UDP数据包, 但在路由表中,ServerA的默认设备是DeviceB, 如何在不修改路由表的情况下由DevideA发送数据包?
非常感谢!
/ *我使用C或C ++ * /
/ *注意:DeviceA是无线接口,例如:“wlan0”。 * /
/ *注意:我在互联网上找到了一种方法 - > libnet,但它不支持无线接口。 * /
答案 0 :(得分:1)
我认为您必须在setsockopt
使用SO_BINDTODEVICE
选项。代码是这样的(未经测试):
const char *interface = "wlan0";
int sock = socket(AF_INET, SOCK_DGRAM, 0);
setsockopt(sock, SOL_SOCKET, SO_BINDTODEVICE, interface, strlen(interface));