Linux 时钟处理机制(二)
层发送到网络层,如清单3-16.
清单3-16 tcp_write_xmit 函数 static int tcp_write_xmit(struct sock *sk, unsigned int mss_now, int nonagle){ struct tcp_sock *tp = tcp_sk(sk); struct sk_buff *skb; …… if (unlikely(tcp_transmit_skb(sk, skb, 1, GFP_ATOMIC))) break; tcp_event_new_data_sent(sk, skb); …… return !tp->packets_out && tcp_send_head(sk);} 注意该函数中加粗的函数,其中 tcp_transmit_skb 函数是真正将数据包由 TCP 层发送到网络层中的函数.数据发送后,将调用函数 tcp_event_new_data_sent ,而后者又会调用函数 inet_csk_reset_xmit_timer 来设置超时软件时钟的到期时间. 当函数 tcp_event_new_data_sent 结束之后,处理超时的软件时钟已经设置好了.内核会在每一次时钟中断处理完成后检测该软件时钟是否到期.如果网络真的超时,没有 ACK 返回,那么当该软件时钟到期后内核就会执行函数 tcp_write_timer .函数 tcp_write_timer 将进行数据包的重新发送,并重新设置超时重传软件时钟的到期时间. |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |