如何通过给定设备(不是默认设备)发送数据?

时间:2011-09-08 20:11:21

标签: linux sockets wireless

  

可能重复:
  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,但它不支持无线接口。 * /

1 个答案:

答案 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));