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

问题描述 投票:5回答:4

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

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

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

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

c sockets network-programming ip
4个回答
9
投票

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

你也可以发现这个有用的问题:bind socket to network interface

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


3
投票

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

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

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


1
投票

服务器的地址由您决定。

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

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

看看Bind man page


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.