Chinaunix首页 | 论坛 | 博客
  • 博客访问: 155870
  • 博文数量: 41
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 425
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-14 10:16
文章分类
文章存档

2011年(1)

2010年(5)

2009年(35)

我的朋友

分类: LINUX

2009-11-05 16:24:12

Linux2.6.30内核的socket结构

978计划工作组 2009-11-5

1函数源码

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;

};;

2结构用途

    socket结构是对应用层提供的统一接口,也就是BSD socket,是对网络层的描述。

3语句注释

3.1 成员注释

socket_state state

socket的状态,有五种状态,分别为:

SS_FREE:值为0,表示未分配。

SS_UNCONNECTED:值为1,表示未连接。

SS_CONNECTING:值为2,表示正在连接过程中。

SS_CONNECTED:值为3,表示已经连接完毕。

SS_DISCONNECTING:值为4,表示正在解除连接。 

该域只对TCP协议有用,因为只有TCP是面向连接的,其他的UDPRAW都是无连接的,无需维护状态。

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结构的操作集,此结构的域大部分是函数指针,通过在创建此结构时或初始化时赋给不同的函数实现不同的功能,每种协议都对应一个此结构的实例并用此类协议的操作集进行了初始化。

阅读(1710) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~