套接字基础(转)

摘自:http://www.cnblogs.com/youthlion/archive/2012/01/16/2274463.html

 ai_family参数指定调用者期待返回的套接口地址结构的类型。

它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC。
如果指定AF_INET,那么函数就不能返回任何IPV6相关的地址信息;
如果仅指定了AF_INET6,则就不能返回任何IPV4地址信息。
AF_UNSPEC则意味着函数返回的是适用于指定主机名和服务名且适合任何协议族的地址。
如果某个主机既有AAAA记录(IPV6)地址,同时又有A记录(IPV4)地址,那么AAAA记录将作为sockaddr_in6结构返回,而A记录则作为sockaddr_in结构返回。
 
AF_INET6用于IPV6的系统里面,AF_INET 及 PF_INET 是IPV4用的.
 
AF 表示ADDRESS FAMILY 地址族
PF 表示PROTOCOL FAMILY 协议族
 
windows中AF_INET与PF_INET完全一样,而在Unix/Linux系统中,在不同的版本中这两者有微小差别。

套接字创建流程及数据发送流程

以INET协议族为例:

image

套接字创建流程:

应用程序创建套接字时,调用socket函数,该函数触发内核的sys_socket函数。sys_socket函数引用 sock_create,sock_create又调用__sock_create来创建套接字结构,具体实现包括:struct socket结构对象,访问net_families变量得到协议族套接字的创建方法。对于INET套接字得到对应的套接字创建方法 inet_create。inet_create函数创建一个INET套接字(用socket结构体表示),并根据套接字类型来决定传输层所采用的协议。 socket结构体最重要的信息保存于其内部的sock结构体中(由sk指针指向该结构),inet_create为此结构分配内存,并根据套接字类型做 出不同的初始化。

posted @ 2013-03-30 16:00  李伯波  阅读(246)  评论(0编辑  收藏  举报