绑定在客户端代码连接之前

我有多个以太网I / F。 eth0,eth1,eth2 …我想连接到外部服务器,例如1.2.3.4:80。

我的连接是好的,但在某些特殊情况下,我想连接为eth1而不是eth0。 服务器的代码检查我的接口的IP地址。 我认为我需要绑定之前连接。 没有绑定(2)服务器总是从eth0获取数据包

我正在查找演示此行为的代码。 有人有一个例子的链接?

Solutions Collecting From Web of "绑定在客户端代码连接之前"

你不需要bind(2)

你在这里要做的是在你的套接字上使用不同的网络接口 。 要使用非系统默认的网络接口,您需要使用SO_BINDTODEVICE套接字选项以及setsockopt 。 您要使用的接口(例如"eth1"应指定为要传递给setsockoptifreq结构的ifr_name字段中的字符串。 为此,您需要包含<net/if.h>标题。

基本上,像下面的(未经测试的)代码:

 int set_interface(int socket_fd, const char* interface_name) { ifreq interface; memset(&interface, 0, sizeof(interface)); strncpy(interface.ifr_name, interface_name, IFNAMSIZ); int res = setsockopt(socket_fd, SOL_SOCKET, SO_BINDTODEVICE, &ifreq, sizeof(ifreq)); return res; } 

此外,请确保检查返回码,以防setsockopt失败。