当前位置:文库下载 > 所有分类 > IT/计算机 > 追踪LINUX TCP IP代码运行第2章从socket创建开始
侵权投诉

追踪LINUX TCP IP代码运行第2章从socket创建开始

追踪LINUX TCP/IP代码运行,socekt编程,3G通信等

第2章 Socket的创建

2.1 本章几个重要数据结构

我们先来了解Socket数据结构的定义,它在include/linux/net.h中。

代码清单2.1 Socket结构的定义

117 struct socket { 118 119 120 121 122 123 124 125 126 };

代码清单2.1是通用BSD的Socket定义,特别应该注意的是sock结构变量,这个结构体的定义非常大,sock结构体是根据使用的协议而挂入socket,每一种协议都有此结构变量,之所以从socket中分离出sock这么一个重要的结构是因为socket是通用的套接字结构体,而sock而与具体使用的协议相密切,总而言之,公共的通用部分放在socket结构中,而通用部分的放在sock结构体,这就是socket的定义内容相对少而sock定义内容相对庞大的原因。

代码清单2.2 sock结构的定义

198 struct sock { 199 200 201 202 203

/*

* 结构inet_timewait_sock也会使用 sock_common, * 所以不要在__sk_common前面添加任何内容 */

struct sock_common __sk_common;//与 inet_timewait_sock共享使用

__sk_common.skc_family//地址族 __sk_common.skc_reuse//确定复用地址 __sk_common.skc_node//用于链入主哈希表 __sk_common.skc_bind_node//链入绑定哈希表 __sk_common.skc_refcnt//使用计数器

__sk_common.skc_hash//查找哈希表时的哈希值 __sk_common.skc_prot//协议函数表 __sk_common.skc_net//所属网络空间 sk_shutdown : 2, //是否关闭 __sk_common.skc_state//连接状态

socket_state unsigned long

state; //Socket的状态

flags; //Socket的标志位

*fasync_list; //Socket的异步唤醒队列

const struct proto_ops *ops; //Socket的函数操作表 struct fasync_struct struct file struct sock short

*file; //与Socket关联的文件指针

*sk; //代表具体协议内容的Sock结构指针

wait; //用于等待队列 type; //Socket的类型

wait_queue_head_t

204 #define sk_family 205 #define sk_state 206 #define sk_reuse 208 #define sk_node 210 #define sk_refcnt 211 #define sk_hash 212 #define sk_prot 213 #define sk_net 214 215

unsigned char

207 #define sk_bound_dev_if __sk_common.skc_bound_dev_if//绑定设备ID 209 #define sk_bind_node

// SEND_SHUTDOWN 和RCV_SHUTDOWN的掩码,冒号后边的2表示占2位。

sk_no_check : 2,//是否检查数据包

第1页

猜你喜欢

返回顶部