我將一個套接字綁定到我的地址來監聽連接。爲此,我使用系統調用getaddrinfo()
獲得我的地址信息,該系統調用爲我提供了一種獨立於ip的方式來執行我想要的操作。問題是這個系統調用返回的結構體的IP地址字段全部爲空。例如:如何從一個struct addrinfo獲取我自己的IP地址
struct addrinfo hints, *servinfo, *p;
int sock;
memset(&hints, 0, sizeof(struct addrinfo));
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE;
getaddrinfo(NULL, port, &hints, &servinfo)
for (p = servinfo; p != NULL; p = p->ai_next)
if (p->ai_family == AF_INET6)
break;
sock = socket(p->ai_family, p->sock_type, p->protocol);
bind(sock, p->ai_addr, p->ai_addrlen)
在上面的代碼中。 *p
變量應該有關於我的機器的IPv6地址的某種信息,因爲綁定成功,但字段p->ai_addr->sin6_addr
(假定這將在沒有投射的情況下工作)是空白的。我怎樣才能確切知道我將使用什麼地址?
您可能不得不在意機器是否連接到多個網絡,並且您不想監聽所有機器的連接。在這種情況下,您必須綁定到您想要收聽的特定IP。 –
@ RemyLebeau-TeamB:在這種情況下,您應該從用戶那裏獲得IP,並將它們提供給'node'參數中的'getaddrinfo()'。 – caf