全部博文(41)
分类: LINUX
2009-09-01 13:48:46
tcp.c文件的tcp_build_header函数
978计划工作组
/*
* 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));
}
创建TCP首部。
tcp_write
|__tcp_build_header
sk->dummy_th:缓存的tcp首部,可以用于快速创建tcp首部。
th->ack = 1;
sk->write_seq:表示应用程序下一次写数据时所对应的第一个字节的序列号,此处不用send_seq是因为写入了并不一定发送了,send_seq表示本地将要发送的下一个数据包中第一个字节对应的序列号。
th->psh:值为1如同URG=1表示需要将数据立刻交给应用程序。
th->ack=1:。