多个以太网接口 – 如何创build一个单独的networking和从C代码访问

我有一个Linux设备(实际上是一个用于原型的BeagleBoard),带有两个以太网适配器。 我想要的是这样的:

我希望两个接口可以完全分开,我的代码可以select想要监听/打开连接的接口。 典型代码:

socket_desc = socket(AF_INET, SOCK_STREAM, 0); memset(&client_addr, 0, sizeof(client_addr)); client_addr.sin_family = AF_INET; inet_pton( AF_INET, address, (void *)(&(client_addr.sin_addr.s_addr)) ); client_addr.sin_port = htons(port); /* Connect to remote on TCP port: */ connect(*socket_desc, (struct sockaddr*) &client_addr, sizeof(client_addr) ); ... 

我们可以设置地址和端口连接,但不能设置以太网接口。 我find了这个答案 。 这是否意味着我所要实现的内容必须留给内核路由?

我知道我可以将eth1设置在自己的子网上,但是我有一个问题:鉴于我们对客户端networking一无所知,我怎么知道我使用的任何子网不会最终冲突与客户的networking? 例如,我在这里使用192.168.1.0,所以我可以把eth1放在192.168.0.0上,但是如果客户端使用那个范围呢? 我们不希望为每个部署重新configurationeth1及其连接设备的设置,尽pipe我们可能必须configurationeth0。

那么有没有更好的方法来做到这一点? 或者可能是一个保留的IP地址范围,我可以使用eth1上的子网,这是保证不会冲突客户端的networking(如169.254.1.x)?

对不起,这有些含糊,但我已经search了几天,可能变得更困惑,而不是更less。

编辑 – 2013-08-29:

我刚刚发现这个问题提供了一个部分的答案:你可以使用setsockopt(…)SO_BINDTODEVICE绑定到一个特定的设备/接口。 这似乎工作,但我仍然不知道如何设置路由表,以便在“内部”networking恰好与连接到eth0的“外部”networking具有相同的IP地址范围的情况下,可靠地工作。

Solutions Collecting From Web of "多个以太网接口 – 如何创build一个单独的networking和从C代码访问"