gpt4 book ai didi

c - 在客户端代码连接之前绑定(bind)

转载 作者:IT王子 更新时间:2023-10-29 00:12:59 24 4
gpt4 key购买 nike

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

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

我正在寻找演示此行为的代码。有人有示例链接吗?

最佳答案

你不需要bind(2)为了这。

您在这里要做的是为您的套接字使用不同的网络接口(interface)。要使用系统默认以外的网络接口(interface),您需要使用 SO_BINDTODEVICE socket 选项以及 setsockopt .您要使用的接口(interface),例如"eth1"例如,应在 ifr_name 中指定为字符串领域 ifreq struct这是要传递给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;
}

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

关于c - 在客户端代码连接之前绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4404572/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com