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

2011年(1)

2010年(5)

2009年(35)

我的朋友

分类: LINUX

2009-08-04 15:59:25

tcp.c文件的tcp_close_pending函数

978计划工作组 2009-8-4

1函数源码

/*

 *   This routine closes sockets which have been at least partially

 *   opened, but not yet accepted. Currently it is only called by

 *   tcp_close, and timeout mirrors the value there.

 */

 

static void tcp_close_pending (struct sock *sk)

{

       struct sk_buff *skb;

 

       while ((skb = skb_dequeue(&sk->receive_queue)) != NULL)

       {

              skb->sk->dead=1;

              tcp_close(skb->sk, 0);

              kfree_skb(skb, FREE_READ);

       }

       return;

}

2函数用途

关闭已经至少完成了第1次握手但是还没完成第3次握手的套接字。

3语句注释

3.1 struct sock *sk;

sk侦听套接字的sock结构

3.2 while ((skb = skb_dequeue(&sk->receive_queue)) != NULL)

&sk->receive_queuesk_buff的链表头地址;此链表是一个双向循环链表,用于存储至少完成了第1次握手但是没有完成第3次握手的socket的相关信息。

skb_dequeue:删除链表的某节点并返回次节点;此节点仅仅是脱离了链表并未实际的释放内存。

while知道整个链表的节点都删除完毕为止。

3.3 skb->sk->dead=1;

skb->sk->dead等于1表示该sock结构已处于释放状态。

3.4 tcp_close(skb->sk, 0);

0立即清空接收队列。

tcp_close:释放之前创建的用于本地通信的套接字。

 

3.5 kfree_skb(skb, FREE_READ);

FREE_READ表示调用struct proto 结构的rfree函数。

kfree_skb:释放缓存的请求数据包。

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