国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区

掃一掃
關(guān)注微信公眾號(hào)

Apache源代碼全景分析:網(wǎng)絡(luò)地址處理 (2)
2006-06-14   

從實(shí)現(xiàn)代碼可以看出,函數(shù)的內(nèi)部實(shí)際的地址轉(zhuǎn)換過(guò)程是由函數(shù)find_address完成的。不過(guò)在調(diào)用find_address之前,函數(shù)進(jìn)行了相關(guān)檢查和預(yù)處理,這些檢查和預(yù)處理包括:

1、APR_IPV4_ADDR_OK標(biāo)記只有在hostname為NULL,同時(shí)family為APR_UNSPEC的時(shí)候才會(huì)有效,而APR_IPV6_ADDR_OK和APR_IPV4_ADDR_OK是相互排斥的,一旦定義了APR_IPV4_ADDR_OK,就不能使用APR_IPV6_ADDR_OK,反之亦然。只有在hostname為NULL,同時(shí)family為APR_UNSPEC并且沒(méi)有定義APR_IPV4_ADDR_OK的時(shí)候APR_IPV6_ADDR_OK才會(huì)有效。

2、如果操作系統(tǒng)平臺(tái)并不支持IPV6,同時(shí)并沒(méi)有限定獲取的地址族,那么此時(shí)將默認(rèn)為IPV6。如果指定必須獲取IPV6的地址信息,但系統(tǒng)并不提供支持,此時(shí)返回APR_EINVAL。

一般情況下,在IPV4中從主機(jī)名到網(wǎng)絡(luò)地址的解析可以通過(guò)gethostbyname()函數(shù)完成,不過(guò)該API不允許調(diào)用者指定所需地址類型的任何信息,這意味著它僅返回包含IPV4地址的信息,對(duì)于目前新的IPV6則無(wú)能為力。一些平臺(tái)中為了支持IPV6地址的解析,提供了新的地址解析函數(shù)getaddrinfo()以及新的地址描述結(jié)構(gòu)struct addrinfo。APR中通過(guò)宏HAVE_GETADDRINFO判斷是否支持IPV6地址的解析。目前Window 2000/XP以上的操作系統(tǒng)都能支持新特性。為此APR中根據(jù)系統(tǒng)平臺(tái)的特性采取不同的方法完成地址解析。

首先我們來(lái)看支持IPV6地址解析平臺(tái)下的實(shí)現(xiàn)代碼,find_address函數(shù)的實(shí)現(xiàn)如下:

static apr_status_t find_addresses(apr_sockaddr_t **sa,

const char *hostname, apr_int32_t family,

apr_port_t port, apr_int32_t flags,

apr_pool_t *p)

{

if (flags & APR_IPV4_ADDR_OK) {

apr_status_t error = call_resolver(sa, hostname, AF_INET, port, flags, p);

#if APR_HAVE_IPV6

if (error) {

family = AF_INET6; /* try again */ u

}

else

#endif

return error;

}

#if APR_HAVE_IPV6

else if (flags & APR_IPV6_ADDR_OK) {

apr_status_t error = call_resolver(sa, hostname, AF_INET6, port, flags, p);

if (error) { v

family = AF_INET; /* try again */

}

else {

return APR_SUCCESS;

}

}

#endif

return call_resolver(sa, hostname, family, port, flags, p); w

}

從上面的代碼可以清晰的看到APR_IPV4_ADDR_OK和APR_IPV6_ADDR_OK的含義:對(duì)于前者,函數(shù)內(nèi)部首先查詢對(duì)應(yīng)主機(jī)的IPV4地址,只有在IPV4查詢失敗的時(shí)候才會(huì)繼續(xù)查詢IPV6地址;而后者則與之相反,對(duì)于給定的主機(jī)名稱,首先查詢IPV6地址,只有在查詢失敗的時(shí)候才會(huì)查詢IPV4。因此APR_IPV4_ADDR_OK和APR_IPV6_ADDR_OK決定了查詢的優(yōu)先性,任何時(shí)候一旦查詢成功都不會(huì)繼續(xù)查詢另外協(xié)議地址,即使被查詢主機(jī)具有該協(xié)議地址。

查詢的核心代碼封裝在內(nèi)部函數(shù)call_resolve中,該函數(shù)的參數(shù)和apr_sockaddr_info_get函數(shù)的參數(shù)完全相同且對(duì)應(yīng),call_resolve中的宏處理比較的多,因此我們將分開(kāi)描述:

static apr_status_t call_resolver(apr_sockaddr_t **sa,

const char *hostname, apr_int32_t family,

apr_port_t port, apr_int32_t flags,

apr_pool_t *p)

{

struct addrinfo hints, *ai, *ai_list;

apr_sockaddr_t *prev_sa;

int error;

char *servname = NULL;

memset(&hints, 0, sizeof(hints));

hints.ai_family = family;

hints.ai_socktype = SOCK_STREAM;

#ifdef HAVE_GAI_ADDRCONFIG

if (family == APR_UNSPEC) {

hints.ai_flags = AI_ADDRCONFIG;

}

#endif

在了解上面的代碼之前我們首先簡(jiǎn)要的了解一些getaddrinfo函數(shù)的用法,該函數(shù)定義如下:

int getaddrinfo(const char *hostname, const char *service, const struct addinfo *hints,struct addrinfo **result);

hostname是需要進(jìn)行地址解析的主機(jī)名稱或者是二進(jìn)制的地址串(IPV4的點(diǎn)分十進(jìn)制或者Ipv6的十六進(jìn)制數(shù)串),service則是一個(gè)服務(wù)名或者是一個(gè)十進(jìn)制的端口號(hào)數(shù)串。其中hints是addfinfo結(jié)構(gòu),該結(jié)構(gòu)定義如下:

struct addrinfo {

int ai_flags; /* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST */

int ai_family; /* PF_xxx */

int ai_socktype; /* SOCK_xxx */

int ai_protocol; /* 0 or IPPROTO_xxx for IPv4 and IPv6 */

size_t ai_addrlen; /* length of ai_addr */

char *ai_canonname; /* canonical name for nodename */

struct sockaddr *ai_addr; /* binary address */

struct addrinfo *ai_next; /* next structure in linked list */

};

hints參數(shù)可以是一個(gè)空置針,也可以是一個(gè)指向某個(gè)addrinfo結(jié)構(gòu)的指針,調(diào)用者在該結(jié)構(gòu)中填入關(guān)于期望返回的信息類型的暗示,這些暗示將控制內(nèi)部的轉(zhuǎn)換細(xì)節(jié)。比如,如果指定的服務(wù)器既支持TCP,也支持UDP,那么調(diào)用者可以把hints結(jié)構(gòu)中的ai_socktype成員設(shè)置為SOCK_DGRAM,使得返回的僅僅是適用于數(shù)據(jù)報(bào)套接口的信息。

hints結(jié)構(gòu)中調(diào)用者可以設(shè)置的成員包括ai_flags,ai_family,ai_socktype和ai_protocol。

其中,ai_flags成員可用的標(biāo)志值及含義如下:

標(biāo)志名稱 標(biāo)志含義

AI_PASSIVE 套接口將用于被動(dòng)打開(kāi)

AI_CANONNAME 告知getaddrinfo函數(shù)返回主機(jī)的規(guī)范名稱

AI_NUMERICHOST 防止任何類型的名字到地址的映射;hostname必須是一個(gè)地址串

AI_NUMERICSERV 防止任何類型的名字到服務(wù)的映射,service參數(shù)必須是一個(gè)十進(jìn)制端口號(hào)數(shù)串

AI_V4MAPPED 如果同時(shí)指定ai_family成員的值為AF_INET6和AF_INET,那么如果沒(méi)有可用的AAAA記錄就返回與A記錄對(duì)應(yīng)得Ipv4映射的IPV6地址

AI_ALL 如果同時(shí)指定AI_V4MAPPED標(biāo)志,那么除了返回與AAAA對(duì)應(yīng)得IPV6地址之外,還會(huì)返回與A記錄對(duì)應(yīng)的IPV4映射的Ipv6地址。

AI_ADDRCONFIG 按照所在主機(jī)的配置選擇返回的地址類型,也就是只查找與所在主機(jī)回饋接口以外的網(wǎng)絡(luò)接口配置的IP地址版本一直的地址。只有當(dāng)本地系統(tǒng)中配置僅僅配置了IPV4地址才會(huì)將主機(jī)名稱轉(zhuǎn)換位IPV4地址;同樣只有當(dāng)本地系統(tǒng)中僅配置了IPV6地址的時(shí)候才會(huì)返回IPV6地址。Loopback地址并不在這種限制之中。

ai_family參數(shù)指定調(diào)用者期待返回的套接口地址結(jié)構(gòu)的類型。它的值包括三種:AF_INET,AF_INET6和AF_UNSPEC。如果指定AF_INET,那么函數(shù)九不能返回任何IPV6相關(guān)的地址信息;如果僅指定了AF_INET6,則就不能返回任何IPV4地址信息。AF_UNSPEC則意味著函數(shù)返回的是適用于指定主機(jī)名和服務(wù)名且適合任何協(xié)議族的地址。如果某個(gè)主機(jī)既有AAAA記錄(IPV6)地址,同時(shí)又有A記錄(IPV4)地址,那么AAAA記錄將作為sockaddr_in6結(jié)構(gòu)返回,而A記錄則作為sockaddr_in結(jié)構(gòu)返回。

if(hostname == NULL) {

#ifdef AI_PASSIVE

hints.ai_flags |= AI_PASSIVE;

#endif

#ifdef OSF1

hostname = family == AF_INET6 ? "::" : "0.0.0.0";

servname = NULL;

#ifdef AI_NUMERICHOST

hints.ai_flags |= AI_NUMERICHOST;

#endif

#else

#ifdef _AIX

if (!port) {

servname = "1";

}

else

#endif /* _AIX */

servname = apr_itoa(p, port);

#endif /* OSF1 */

}

#ifdef HAVE_GAI_ADDRCONFIG

if (error == EAI_BADFLAGS && family == APR_UNSPEC) {

hints.ai_flags = 0;

error = getaddrinfo(hostname, servname, &hints, &ai_list);

}

#endif

if (error) {

#ifndef WIN32

if (error == EAI_SYSTEM) {

return errno;

}

else

#endif

{

#if defined(NEGATIVE_EAI)

error = -error;

#endif

return error + APR_OS_START_EAIERR;

}

}

熱詞搜索:

上一篇:Apache源代碼全景分析:網(wǎng)絡(luò)地址處理 (1)
下一篇:Apache源代碼全景分析:網(wǎng)絡(luò)地址處理 (3)

分享到: 收藏
国产一级一区二区_segui88久久综合9999_97久久夜色精品国产_欧美色网一区二区
欧美唯美清纯偷拍| 亚洲国产精品国自产拍av| 国产精品综合一区二区三区| 综合久久给合久久狠狠狠97色 | 综合欧美亚洲日本| 精品美女在线播放| 欧美色偷偷大香| 不卡一区二区三区四区| 激情深爱一区二区| 丝袜亚洲精品中文字幕一区| 亚洲视频免费在线| 国产亚洲女人久久久久毛片| 欧美一级淫片007| 在线观看成人小视频| 成人国产精品免费观看动漫| 精品在线亚洲视频| 日韩成人免费电影| 亚洲一区在线观看免费| 成人欧美一区二区三区视频网页| 日韩精品一区二区三区中文不卡 | 国产成人在线视频免费播放| 日韩国产精品大片| 亚洲成人在线网站| 一个色在线综合| 亚洲欧美一区二区三区久本道91 | 国产性色一区二区| 337p粉嫩大胆色噜噜噜噜亚洲| 欧美精品v国产精品v日韩精品| 色婷婷亚洲综合| 色婷婷激情综合| 不卡av免费在线观看| 成人免费视频一区二区| 国产成人午夜片在线观看高清观看| 久99久精品视频免费观看| 久久国产精品免费| 欧美96一区二区免费视频| 视频在线观看一区二区三区| 午夜一区二区三区视频| 亚洲午夜精品久久久久久久久| 一区二区三区欧美激情| 一区二区国产视频| 一二三区精品福利视频| 亚洲大尺度视频在线观看| 午夜精品久久久久久久蜜桃app| 午夜精品123| 毛片不卡一区二区| 精品一区二区久久久| 国产自产v一区二区三区c| 国产精华液一区二区三区| 国产99久久久国产精品潘金 | 亚洲国产裸拍裸体视频在线观看乱了| 一区二区三区四区蜜桃| 亚洲国产综合人成综合网站| 天天av天天翘天天综合网色鬼国产| 天天免费综合色| 国内精品久久久久影院一蜜桃| 国产精品一区二区91| av午夜一区麻豆| 欧美影院精品一区| 欧美成人精品1314www| 久久久久久99久久久精品网站| 国产精品电影一区二区| 一区二区三区四区激情| 日韩成人伦理电影在线观看| 狠狠狠色丁香婷婷综合激情| 成人av在线影院| 欧美日韩和欧美的一区二区| 欧美本精品男人aⅴ天堂| 亚洲国产精品ⅴa在线观看| 一区二区不卡在线视频 午夜欧美不卡在| 一区二区三区不卡视频| 精品一区二区日韩| 99vv1com这只有精品| 3atv一区二区三区| 欧美国产日韩一二三区| 亚洲国产精品欧美一二99| 久久成人免费网| 91片在线免费观看| 欧美成人综合网站| 伊人色综合久久天天| 麻豆精品一区二区| 色综合久久66| 26uuu精品一区二区| 一区二区三区在线免费| 国产精品一区2区| 欧美日韩精品一二三区| 国产欧美日韩精品一区| 日韩精品色哟哟| av一区二区三区四区| 日韩欧美国产一区二区在线播放| 亚洲视频在线观看一区| 国产一区免费电影| 91精品国产综合久久蜜臀| 国产精品免费av| 精品一区二区三区视频在线观看| 91久久国产最好的精华液| 久久久久久免费网| 日韩电影免费在线观看网站| 91香蕉视频在线| 久久久久97国产精华液好用吗| 日韩在线a电影| 91黄视频在线| 国产精品久久久久影视| 久久机这里只有精品| 欧美老年两性高潮| 综合久久综合久久| 成人影视亚洲图片在线| 精品美女被调教视频大全网站| 亚洲国产一区二区视频| 99久久久国产精品免费蜜臀| 国产亚洲一区二区在线观看| 日韩不卡一区二区| 欧美在线色视频| 综合电影一区二区三区| 成人影视亚洲图片在线| 久久久综合网站| 久久99久久久久| 欧美肥妇bbw| 亚洲一卡二卡三卡四卡无卡久久 | 国产日韩精品久久久| 久久99精品久久只有精品| 日韩一区二区视频在线观看| 日韩av电影免费观看高清完整版| 欧美在线免费观看视频| 有码一区二区三区| 日本精品一区二区三区四区的功能| 国产精品理论在线观看| 成人黄色电影在线| 国产精品久久久久久久午夜片 | 日本中文字幕不卡| 91精品国产综合久久蜜臀| 午夜一区二区三区视频| 7777精品伊人久久久大香线蕉| 亚洲成人av福利| 91精品福利在线一区二区三区 | 日韩三区在线观看| 日韩精品欧美精品| 欧美一区二区二区| 日本亚洲一区二区| 日韩精品一区二区三区老鸭窝| 免费高清不卡av| 精品国产伦一区二区三区免费 | 欧美视频一区在线| 亚洲成人tv网| 日韩女优电影在线观看| 国产一本一道久久香蕉| 国产视频在线观看一区二区三区| 国产一区二区电影| 国产精品国产三级国产普通话99 | 日韩国产一二三区| 精品1区2区在线观看| 丁香激情综合五月| 亚洲天天做日日做天天谢日日欢| 一本久久综合亚洲鲁鲁五月天| 一级精品视频在线观看宜春院| 欧美日韩日本视频| 裸体一区二区三区| 国产欧美日韩不卡免费| 91国偷自产一区二区使用方法| 亚洲第一激情av| 精品国产污污免费网站入口 | 久久久久久久久久久久电影| 成人精品一区二区三区中文字幕| 综合色天天鬼久久鬼色| 777奇米成人网| 丁香网亚洲国际| 亚洲国产美国国产综合一区二区| 精品日韩成人av| 色网站国产精品| 蜜桃一区二区三区在线| 中文字幕国产一区二区| 欧美日韩在线播放三区| 国产xxx精品视频大全| 亚洲高清中文字幕| 久久久久久毛片| 精品视频一区三区九区| 国产精品一二三区| 亚洲一区二区三区视频在线| 国产三级欧美三级| 欧美精选一区二区| 成人网男人的天堂| 秋霞影院一区二区| 综合婷婷亚洲小说| 精品粉嫩超白一线天av| 色综合天天视频在线观看| 久久99国内精品| 亚洲福利电影网| 国产精品妹子av| 欧美变态tickling挠脚心| 在线一区二区三区四区五区| 国产一区二区剧情av在线| 亚洲成人av一区| 亚洲日本韩国一区| 久久久精品2019中文字幕之3| 欧美狂野另类xxxxoooo| 91偷拍与自偷拍精品| 激情成人综合网| 日韩精品电影一区亚洲| 樱桃视频在线观看一区| 中文字幕在线观看一区二区|