我有多个以太网I / F。eth0,eth1,eth2 …,我想连接到外部服务器,例如1.2.3.4:80。
我的连接没问题,但是在某些特殊情况下,我想以eth1而不是eth0的身份连接。服务器的代码检查我接口的IP地址。我认为连接之前需要绑定。没有bind(2),服务器总是从eth0获取数据包
我正在寻找演示此行为的代码。有人链接到示例吗?
您不需要bind(2)这个。
bind(2)
您要在此处执行的操作是使用与套接字不同的 网络接口 。要使用系统默认设置以外的网络接口,您需要将SO_BINDTODEVICEsocket选项与一起使用setsockopt。"eth1"例如,您要使用的接口应在要传递给ifr_name的ifreqstruct字段中指定为字符串setsockopt。为此,您需要包括<net/if.h>标题。
SO_BINDTODEVICE
setsockopt
"eth1"
ifr_name
ifreq
<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失败。