我打开了一个 TCP 套接字服务器(我省略了一些东西,取自这里
sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol))
是否可以从 sockfd 获取服务器的 IP 地址?如果不是我应该去哪里看?
编辑:我想知道服务器的地址(这是在任何客户端连接之前)。
我打开了一个 TCP 套接字服务器(我省略了一些东西,取自这里
sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol))
是否可以从 sockfd 获取服务器的 IP 地址?如果不是我应该去哪里看?
编辑:我想知道服务器的地址(这是在任何客户端连接之前)。
如果您想知道套接字的另一端是谁,您可以在 Linux中使用getpeername 。getsockname会告诉你你是谁。不过,您可以在绑定时决定您希望服务器最初位于哪个地址。
您可能还会发现这个 SO 问题很有用:将套接字绑定到网络接口
以及 W. Richard Stevens 所著的“Unix Network Programming, vol 1”一书。
在客户端连接之前,您不能使用套接字获取服务器的地址,因为它是未知的。
原则上,一个主机可能有多个 IP。用于连接到服务器的 IP 是属于接口的 IP,连接通过该接口到达。在连接到达之前,它是未知的。
即使您只有一个 IP,连接也可能来自机器内部,在这种情况下,地址将是127.0.0.1
.
所以监听套接字没有关于IP的信息。
您需要找到机器有哪些接口,以及它们的 IP 是什么。
服务器的地址是传递给成功调用的地址bind()
(如您链接的源代码所示)。