全部博文(41)
分类: LINUX
2009-11-05 16:24:12
Linux
978计划工作组
struct socket {
socket_state state;
short type;
unsigned long flags;
/*
* Please keep fasync_list & wait fields in the same cache line
*/
struct fasync_struct *fasync_list;
wait_queue_head_t wait;
struct file *file;
struct sock *sk;
const struct proto_ops *ops;
};;
socket结构是对应用层提供的统一接口,也就是BSD socket,是对网络层的描述。
socket_state state
socket的状态,有五种状态,分别为:
SS_FREE:值为0,表示未分配。
SS_UNCONNECTED:值为1,表示未连接。
SS_CONNECTING:值为2,表示正在连接过程中。
SS_CONNECTED:值为3,表示已经连接完毕。
SS_DISCONNECTING:值为4,表示正在解除连接。
该域只对TCP协议有用,因为只有TCP是面向连接的,其他的UDP和RAW都是无连接的,无需维护状态。
short type
socket的类型,有7种类型,分别是:
SOCK_STREAM:值为1,流套接字,提供双向连续且可信赖的数据流,TCP协议用此种类型。SOCK_DGRAM:值为2,数据报套接字,使用不连续不可信赖的数据包连接,UDP协议用此种类
型。
SOCK_RAW:值为3,原始套接字,一般的套接字是通过TCP才能和IP底层进行数据交换的,原始套接字可以直接穿过TCP层操作IP数据包,也就是说原始套接字是上层应用程序和IP层之间的通道。
SOCK_RDM:值为4,提供可信赖的数据包连接。
SOCK_SEQPACKET:值为5,顺序包套接字, 提供连续可信赖的数据包连接。
SOCK_DCCP:值为6,数据报阻塞控制协议套接字。
SOCK_PACKET:值为10,提供和网络驱动程序直接通信,Linux特有的方式。
还有一个特殊的宏,标示socket类型的上限值的宏SOCK_MAX,被定义为 (SOCK_PACKET + 1)。
unsigned long flags
socket的标志,有5种,分别是:
SOCK_ASYNC_NOSPACE:值为0,表示异步情况下发送缓冲队列已满。
SOCK_ASYNC_WAITDATA:值为1。
SOCK_NOSPACE:值为2,表示发送缓冲队列已满。
SOCK_PASSCRED:值为3。
SOCK_PASSSEC:值为4。
struct fasync_struct *fasync_list
异步唤醒队列。
wait_queue_head_t wait
sock的等待队列,在TCP需要等待时就sleep在这个队列上。
struct file *file
文件相关的域在此结构中,具体信息参见file结构。
struct sock *sk
网络相关的域在此结构中,具体信息参见sock结构。
const struct proto_ops *ops
socket结构的操作集,此结构的域大部分是函数指针,通过在创建此结构时或初始化时赋给不同的函数实现不同的功能,每种协议都对应一个此结构的实例并用此类协议的操作集进行了初始化。