全部博文(41)
分类: LINUX
2009-08-03 16:08:42
tcp.c文件的tcp_dequeue_established函数
978计划工作组
static struct sk_buff *tcp_dequeue_established(struct sock *s)
{
struct sk_buff *skb;
unsigned long flags;
save_flags(flags);
cli();
skb=tcp_find_established(s);
if(skb!=NULL)
skb_unlink(skb); /* Take it off the queue */
restore_flags(flags);
return skb;
}
此函数被tcp_accept函数调用,通过调用函数tcp_find_established函数查看是否有已经完成3次握手的套接字的sock结构,找到的套接字的sock结构在经过tcp_accept处理后将被分配一个新的套接字用于以后的数据通信。
cli();
save_flags(flags):是一个宏,中断保留,与restore_flags配对使用且在同一个函数内被调用。
cli():关闭中断。
skb_unlink(skb):从链表中删除此sock结构节点。
restore_flags(flags):是一个宏,中断恢复,只是恢复到save_flags时的状态,不一定要开中断,与save_flags配对使用且在同一个函数内被调用。