我已经打开了一个TCP套接字服务器(我省略了一些东西,它取自here
sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol))
是否可以从sockfd获取服务器的IP地址?如果不是我应该在哪里看?
编辑:我想知道服务器的地址(这是在任何客户端连接之前)。
答案 0 :(得分:9)
如果您想知道套接字另一端是谁,可以在Linux中使用getpeername。 getsockname会告诉你你是谁。您可以在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)
答案 3 :(得分:0)
服务器的地址是传递给成功调用bind()
的地址(如您链接的源中所示)。