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

2011年(1)

2010年(5)

2009年(35)

我的朋友

分类: LINUX

2009-09-01 13:48:46

tcp.c文件的tcp_build_header函数

978计划工作组 2009-9-1

1函数源码

/*

 *    This routine builds a generic TCP header.

 */

 

extern __inline int tcp_build_header(struct tcphdr *th, struct sock *sk, int push)

{

 

       memcpy(th,(void *) &(sk->dummy_th), sizeof(*th));

       th->seq = htonl(sk->write_seq);

       th->psh =(push == 0) ? 1 : 0;

       th->doff = sizeof(*th)/4;

       th->ack = 1;

       th->fin = 0;

       sk->ack_backlog = 0;

       sk->bytes_rcv = 0;

       sk->ack_timed = 0;

       th->ack_seq = htonl(sk->acked_seq);

       sk->window = tcp_select_window(sk);

       th->window = htons(sk->window);

 

       return(sizeof(*th));

}

2函数用途

创建TCP首部。

3调用关系

tcp_write

|__tcp_build_header

4语句注释

4.1  memcpy(th,(void *) &(sk->dummy_th), sizeof(*th));

sk->dummy_th缓存的tcp首部,可以用于快速创建tcp首部。

4.2  th->seq = htonl(sk->write_seq);

       th->psh =(push == 0) ? 1 : 0;

       th->ack = 1;

sk->write_seq表示应用程序下一次写数据时所对应的第一个字节的序列号,此处不用send_seq是因为写入了并不一定发送了,send_seq表示本地将要发送的下一个数据包中第一个字节对应的序列号。

th->psh值为1如同URG=1表示需要将数据立刻交给应用程序。

th->ack=1

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