在 C/Unix 中侦听 IP 子网的套接字

viv*_*viv 1 c c++ unix network-programming unix-socket

我正在尝试用 C 编写服务器-客户端套接字程序。目标是让服务器侦听特定端口,但跨越属于同一 IP 子网的 IP 地址范围。这个 IP 子网是127.xxx范围的一部分(当然不是 127.0.0.1)。

需要注意的几点:

  • 这是一个基于流的套接字,而不是数据报套接字。
  • 这不是广播地址。
  • 仅在 Unix/Linux 平台上用 C/C++ 实现

我不想为该范围内的每个 IP 地址在服务器上打开多个套接字。这是不可扩展的。

任何帮助将不胜感激。这甚至可行吗?

And*_*oss 5

您只能绑定到单个套接字上的一个地址。为什么不能绑定到 INADDR_ANY 并简单地拒绝任何未绑定到目标 IP 的数据包?或者,您可以绑定到任意端口并使用操作系统级魔法(例如 iptables、bpf)将发往这些 IP/端口组合的数据包重新路由到您的套接字。

  • @Vivek:不,因为它是一个基于流的套接字——你只需要在 `accept()` 返回的套接字上调用 `getpeername()`,并检查它是否是你想要使用的地址之一。 (2认同)