cat*_*eof 9 c linux network-programming
我有多个以太网I/F. eth0,eth1,eth2 ......我想连接到外部服务器,例如1.2.3.4:80.
我的连接没问题,但在某些特殊情况下我想连接为eth1而不是eth0.服务器的代码检查我的接口的IP地址.我认为我需要在连接之前绑定.如果没有bind(2),服务器总是从eth0获取数据包
我正在寻找演示此行为的代码.有没有人有一个例子的链接?
Cha*_*via 10
你不需要bind(2)
这个.
您在这里要做的是使用与套接字不同的网络接口.要使用系统默认以外的网络接口,您需要使用SO_BINDTODEVICE
套接字选项setsockopt
.您要使用的接口"eth1"
(例如)应该在要传递给ifr_name
的ifreq
结构字段中指定为字符串setsockopt
.为此,您需要包含<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;
}
Run Code Online (Sandbox Code Playgroud)
此外,请确保检查返回代码,以防setsockopt
失败.