我打开了一个TCP socket服务器(我省略了一些东西,它取自here
sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol))是否可以从sockfd获取服务器的IP地址?如果没有,我应该去哪里找呢?
编辑:我想知道服务器的地址(这是在任何客户端连接之前)。
发布于 2013-02-05 23:56:20
如果您想知道套接字的另一端是谁,可以使用Linux中的getpeername。getsockname会告诉你你是谁。不过,您可以在bind时间决定最初希望服务器所在的地址。
你可能也会发现这个问题很有用:bind socket to network interface
和W.Richard Stevens的"Unix Network Programming,Vol1“一书。
发布于 2013-02-06 00:10:25
在客户端连接之前,您不能使用套接字获取服务器的地址,因为它是未知的。
原则上,一台主机可以有多个IP。用于连接到服务器的IP是属于接口的IP,连接通过该接口到达。在连接到达之前,它是未知的。
即使您只有一个IP,连接也可能从机器内部到达,在这种情况下,地址将是127.0.0.1。
因此,侦听套接字没有关于IP的信息。
您需要找到机器有哪些接口,以及它们的IP是什么。
发布于 2013-02-06 00:08:16
服务器的地址由您决定。
取决于传递给bind()函数的参数。
您可以指定single ip或将套接字绑定到主机的每个地址。
看看Bind man page
https://stackoverflow.com/questions/14711392
复制相似问题