从套接字描述符获取IP地址?

时间:2013-02-05 15:49:02

标签: c sockets network-programming ip

我已经打开了一个TCP套接字服务器(我省略了一些东西,它取自here

sockfd = socket(p->ai_family, p->ai_socktype,
            p->ai_protocol))

是否可以从sockfd获取服务器的IP地址?如果不是我应该在哪里看?

编辑:我想知道服务器的地址(这是在任何客户端连接之前)。

4 个答案:

答案 0 :(得分:9)

如果您想知道套接字另一端是谁,可以在Linux中使用getpeernamegetsockname会告诉你你是谁。您可以在bind时间确定服务器最初要使用的地址。

您可能还会发现此SO问题很有用:bind socket to network interface

由W. Richard Stevens撰写的“Unix网络编程,第1卷”一书。

答案 1 :(得分:3)

在客户端连接之前,您无法使用套接字获取服务器的地址,因为它不知道。

原则上,主机可能有多个IP。用于连接服务器的IP是属于接口的IP,连接通过该IP到达。在连接到达之前,它是未知的 即使您只有一个IP,连接也可能从机器内到达,在这种情况下,地址将为127.0.0.1

因此侦听套接字没有关于IP的信息 您需要找到机器具有的接口以及它们的IP。

答案 2 :(得分:1)

服务器的地址取决于您。

取决于将哪些参数传递给bind()函数。

您可以指定single ip或将套接字绑定到主机的每个地址。​​

查看Bind man page

答案 3 :(得分:0)

服务器的地址是传递给成功调用bind()的地址(如您链接的源中所示)。