TCP timer 的问题
时间:2010-08-24
来源:互联网
这里想说的是 TCP keepalive time 和 syn ack timer。
我的版本是 2.6.24的内核,keepalive timer 的定义如下:
复制代码
从上面代码16~19行中可以看出,tcp_synack_timer 是在tcp_keepalive_timer中调用的。但是tcp_keepalive_timer的启用是需要应用层socket设置 KEEPALIVE选项的。这样的话,tcp_synack_timer的工作不是受限了吗?
而且,内核代码中没有其他位置调用tcp_synack_timer 。
熟悉的朋友指点一下我是不是那里理解错误了?
我的版本是 2.6.24的内核,keepalive timer 的定义如下:
- static void tcp_keepalive_timer (unsigned long data)
- {
- struct sock *sk = (struct sock *) data;
- struct inet_connection_sock *icsk = inet_csk(sk);
- struct tcp_sock *tp = tcp_sk(sk);
- __u32 elapsed;
-
- /* Only process if socket is not in use. */
- bh_lock_sock(sk);
- if (sock_owned_by_user(sk)) {
- /* Try again later. */
- inet_csk_reset_keepalive_timer (sk, HZ/20);
- goto out;
- }
-
- if (sk->sk_state == TCP_LISTEN) {
- tcp_synack_timer(sk);
- goto out;
- }
-
- if (sk->sk_state == TCP_FIN_WAIT2 && sock_flag(sk, SOCK_DEAD)) {
- if (tp->linger2 >= 0) {
- const int tmo = tcp_fin_time(sk) - TCP_TIMEWAIT_LEN;
-
- if (tmo > 0) {
- tcp_time_wait(sk, TCP_FIN_WAIT2, tmo);
- goto out;
- }
- }
- tcp_send_active_reset(sk, GFP_ATOMIC);
- goto death;
- }
而且,内核代码中没有其他位置调用tcp_synack_timer 。
熟悉的朋友指点一下我是不是那里理解错误了?
作者: Godbach 发布时间: 2010-08-24
你再往下面看代码,这句:
复制代码
这个才是判断是否有开启keepalive的.没有开启则直接退出,而此时synack的定时器已经处理了。
- if (!sock_flag(sk, SOCK_KEEPOPEN) || sk->sk_state == TCP_CLOSE)
- goto out;
作者: simohayha_cu 发布时间: 2010-08-24
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28