c - Linux : TCP socket programming over multiple ethernet ports

标签 c sockets ethernet

<分区>

我一直在网上搜索如何使用 C/C++ 在 Linux 中使用两个独立的以太网端口(例如 eth0 和 eth1)

我了解如何使用 socket() 和 inet_pton,但这似乎只适用于单个以太网端口。

第一个以太网端口自动映射到 192.168.0.100,第二个是 192.168.0.101

最佳答案

两部分答案。

  1. 通常,您不必担心显式使用多个以太网端口。内核会自动处理它。这是它的工作原理。对于传出数据包,内核根据目标 IP 地址通过适当的以太网端口发送数据包。因此,如果网络 10.0.0.0 可通过 eth0 访问,则数据包将从那里发送出去。如果网络 11.0.0.0 可以通过 eth1 访问,那么数据包将从那里发送出去。内核通过网络掩码、IP 地址和分配给接口(interface)的默认网关(结合路由表)确定网络可达性。
  2. 对于传入的数据包,如果您绑定(bind)到任何地址,那么您正在监听的端口的所有数据包都会传送给您。您还可以选择绑定(bind)到特定的 IP 地址,在这种情况下,只会将发送到该 IP 地址和端口的数据包传送给您。

关于c - Linux : TCP socket programming over multiple ethernet ports,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16988688/

相关文章:

c - 定义和声明有什么区别?

c - PIC 编程中断故障。

sockets - 重新连接以太网后,UDP套接字将写入过期的数据包。以太网断开连接后,如何从套接字刷新写缓冲区?

ethernet - 为什么在曼彻斯特编码中,比特率是波特率的一半?

c - 如何在循环中设置信号检查?

c++ - GCC 的已知 C/C++ 优化是什么

java - 拥有用于发送和接收 UDP 数据报的专用 DatagramSocket 是否有(性能)优势?

带有 "watchdog"的 Ruby 线程

c - socket如何发送数据?

sockets - 无法接收我刚刚发送的原始以太网帧数据包