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