套接字编程中的bind调用混乱

时间:2010-06-10 14:17:20

标签: unix sockets bind

我正在使用c / c ++在unix中学习套接字编程。 我对一个函数调用bind(params ..)感到困惑。 实际上它采用了adreess结构“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地址。通过这种方式,只有一个与机器相关的地址。 Thye绑定调用应直接将套接字绑定到单个可用地址。

请解释有什么不同的情况,为什么会这样?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

不正确。大多数机器都是Multi-Homed,这意味着它们有多个IP地址。

例如,网络地址和127.0.0.1。