簡體   English   中英

從套接字描述符獲取IP地址?

[英]Get IP address from socket descriptor?

我已經打開了一個TCP套接字服務器(我省略了一些東西,它是從這里獲取的

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

是否有可能從sockfd獲取服務器的IP地址? 如果不是我應該在哪里看?

編輯:我想知道服務器的地址(這是在任何客戶端連接之前)。

如果你想知道套接字另一端的誰,你可以在Linux中使用getpeername getsockname會告訴你你是誰。 您可以在綁定時確定服務器最初要使用的地址。

您可能還會發現此SO問題很有用: 將套接字綁定到網絡接口

還有W. Richard Stevens撰寫的“Unix網絡編程,第1卷”一書。

在客戶端連接之前,您不能使用套接字來獲取服務器的地址,因為它是未知的。

原則上,主機可以具有多個IP。 用於連接服務器的IP是屬於接口的IP,連接通過該IP到達。 在連接到達之前,它是未知的。
即使您只有一個IP,連接也可能從機器內到達,在這種情況下,地址將為127.0.0.1

因此,偵聽套接字沒有關於IP的信息。
您需要找到機器具有的接口以及它們的IP。

服務器的地址由您決定。

取決於哪些參數傳遞給bind()函數。

您可以指定single ip或將套接字綁定到主機的每個地址。

看看Bind手冊頁

服務器的地址是傳遞給bind()的成功調用的地址(如您鏈接的源中所示)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM