【问题标题】:Confusion in bind call in socket programming套接字编程中的绑定调用混淆
【发布时间】:2010-06-10 14:17:19
【问题描述】:

我正在使用 c/c++ 在 unix 中学习套接字编程。 我对一个函数调用 bind(params..) 感到困惑。 实际上它需要地址结构“sockaddr_in”,我们可以通过以下方式创建结构

sockaddr_in.*** = somthing..
sockaddr_in..s_addr   htonl(INADDR_ANY)

**Passing INADDR_ANY will alow to bind all local addresses**

我的问题是,为什么我们需要使用 "INADDR_ANY" ? 据我所知,每台机器只能有一个唯一的 IP 地址。这样,只有一个地址与机器相关联。你的绑定调用应该直接将套接字绑定到单个可用地址。

请解释一下有哪些不同的场景以及为什么会这样?

【问题讨论】:

    标签: unix sockets bind


    【解决方案1】:

    一台机器通常对每个连接的网络接口都有一个 IP 地址,加上 127.0.0.1 用于 localhost(环回)。例如,笔记本电脑可能以 10.0.1.25 连接到无线网络,也可能以 10.0.2.4 连接到有线网络。服务器通常具有到内部网络和公共网络的接口。

    【讨论】:

      【解决方案2】:

      一台机器可能有多个 IP 地址,因为它有多个网卡或通过软件。 INADDR_ANY 允许您将套接字绑定到机器的所有 IP 地址。

      【讨论】:

        【解决方案3】:

        不正确。大多数机器都是多宿主的,这意味着它们有多个 IP 地址。

        比如网络地址和127.0.0.1。

        【讨论】:

          猜你喜欢
          • 2015-12-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-12
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多