7

我打开了一个 TCP 套接字服务器(我省略了一些东西,取自这里

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

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

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

4

4 回答 4

12

如果您想知道套接字的另一端是谁,您可以在 Linux中使用getpeername 。getsockname会告诉你你是谁。不过,您可以在绑定时决定您希望服务器最初位于哪个地址。

您可能还会发现这个 SO 问题很有用:将套接字绑定到网络接口

以及 W. Richard Stevens 所著的“Unix Network Programming, vol 1”一书。

于 2013-02-05T15:56:20.303 回答
3

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

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

所以监听套接字没有关于IP的信息。
您需要找到机器有哪些接口,以及它们的 IP 是什么。

于 2013-02-05T16:10:25.123 回答
1

服务器的地址由您决定。

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

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

查看绑定手册页

于 2013-02-05T16:08:16.427 回答
0

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

于 2013-02-05T17:50:11.923 回答