3

我的应用需要访问两个网卡。一个用于接收数据(eth0),另一个用于发送数据(3G 调制解调器)。

通常,内核会强制应用程序一次只能使用一张卡。

我可以做些什么来让它运行吗?

谢谢你。

4

3 回答 3

3

内核不做这样的事情。

内核将根据每张卡分配的路由信息​​和网络将您的流量路由到最合适的最终目的地。但是,如果您使用 TCP,您的双向通信将只使用一个路由,因为只有一个地址与该连接关联。

如果您尝试实现多宿主发送/接收系统,普通 TCP 不支持这 - 您将需要使用可能在内核中实现的不同协议。

于 2010-05-26T19:01:13.980 回答
2

内核不会强迫您使用单个接口。如果您未另行指定,它只会选择默认接口。您可以通过在 bind() 命令中指定其 IP 地址来指定特定接口。要获取可用接口及其名称的列表,请使用 ioctl(SIOCGIFCONF) 函数。

这是一个例子:http ://techpulp.com/2008/10/get-list-of-interfaces-using-siocgifconf-ioctl/

于 2010-05-26T20:11:06.227 回答
1

您可以将两个不同的 UDP 套接字绑定到单独的 NIC,bind(2)并在一个上发送并在另一个上侦听。

于 2010-05-26T19:58:26.580 回答