溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c++ ip6編程

發(fā)布時間:2020-06-27 05:14:13 來源:網(wǎng)絡(luò) 閱讀:360 作者:hakuyo 欄目:編程語言

1,使用 getaddrinfo 來 bind 或 connect

bind 和 connect 有了一種新方式,通過 getaddrinfo 返回適合 bind 和 connect 的地址,然后,通過遍歷列表,直到 bind 或 connect 成功,結(jié)束遍歷(參見 getaddrinfo說明中的例子)。

getaddrinfo 可以返回 ip4 和 ip6 地址。

即不再通過構(gòu)造 sockaddr_in(6) 而是通過構(gòu)造一個 addrinfo 來 bind 或 connect 了,也不用關(guān)心 ip 類型及結(jié)構(gòu)體成員,不再做字節(jié)序轉(zhuǎn)換了。

    struct addrinfo hints;
    struct addrinfo *result = NULL, *rp = NULL;
    memset(&hints, 0, sizeof(struct addrinfo));
    hints.ai_family          = AF_UNSPEC;     /* Allow IPv4 or IPv6 */
    hints.ai_socktype     = SOCK_STREAM;  /* Datagram socket */
    hints.ai_flags            = AI_ADDRCONFIG;
    //hints.ai_protocol     = 0;          /* Any protocol */
    hints.ai_protocol       = IPPROTO_TCP; 
    hints.ai_canonname = NULL;
    hints.ai_addr             = NULL;
    hints.ai_next             = NULL;
hints.ai_flags 取值 第一個參數(shù)的取值 返回列表的包含值
包含AI_PASSIVE NULL INADDR_ANY和IN6ADDR_ANY_INIT,即 0.0.0.0 和 ::
包含AI_PASSIVE 192.168.1.1 192.168.1.1
不包含AI_PASSIVE 192.168.1.1 192.168.1.1
不包含AI_PASSIVE 127.0.0.1 127.0.0.1
不包含AI_PASSIVE 0.0.0.0 0.0.0.0

當(dāng)?shù)谝粋€參數(shù)不為NULL時,忽略AI_PASSIVE
當(dāng)不包含AI_PASSIVE時,返回的是一個適合 connect,sendto,sendmsg的地址

2,通過 addrinfo 獲取 host 及 port

char host[NI_MAXHOST] = {0};
char port[NI_MAXSERV] = {0};
getnameinfo(hints.ai_addr,NI_MAXHOST,host,NI_MAXHOST,port,NI_MAXSERV,NI_NUMERICHOST|NI_NUMERICSERV);

3,ip4 和 ip6 的公共儲存結(jié)構(gòu)體 sockaddr_storage
獲取 ip 地址信息時,可以先定義個 這種類型的變量儲存,支持 ip4 和 ip6,再通過 getnameinfo 來獲取 host 和 port

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI