您现在的位置: 爱51代码网 >> 范文 >> 文章正文
TIME_WAIT状态下对接收到的数据包如何处理
h);
    spinlock_t *lock = inet_ehash_lockp(hinfo, hash);
    struct sock *sk2;
    const struct hlist_nulls_node *node;
    struct inet_timewait_sock *tw;

    spin_lock(lock);

    /* Check TIME-WAIT sockets first. */
    sk_nulls_for_each(sk2, node, &head->twchain) {
        tw = inet_twsk(sk2);


        if (INET_TW_MATCH(sk2, net, hash, acookie,
                    saddr, daddr, ports, dif)) {
            if (twsk_unique(sk, sk2, twp))
                goto unique;
            else
                goto not_unique;
        }
    }
    tw = NULL;

    /* And established part... */
    sk_nulls_for_each(sk2, node, &head->chain) {
        if (INET_MATCH(sk2, net, hash, acookie,
                    saddr, daddr, ports, dif))
            goto not_unique;
    }

unique:
    ......
    return 0;

not_unique:
    spin_unlock(lock);
    return -EADDRNOTAVAIL;
}  可以看到返回EADDRNOTVAIL错误的有两种情况:
   1、在TIME_WAIT传输控制块中找到匹配的端口,并且twsk_unique()返回true时
   2、在除TIME_WAIT和LISTEN状态外的传输块中存在匹配的端口。论文网 
  第二种情况很好容易理解了,只要状态在FIN_WAIT_1、ESTABLISHED等的传输控制块使用的端口和要查找的匹配,就会返回EADDRNOTVAIL错误。第一种情况还要取决于twsk_uniqueue()的返回值,所以接下来我们看twsk_uniqueue()中什么情况下会返回true。
  如果是TCP套接字,twsk_uniqueue()中会调用tcp_twsk_uniqueue()来判断,返回true的条件如下所示:

[cpp] view plaincopyprint?
01.int tcp_twsk_unique(struct sock *sk, struct sock *sktw, void *twp) 
02.{ 
03.    const struct tcp_timewait_sock *tcptw = tcp_twsk(sktw); 
04.    struct tcp_sock *tp = tcp_sk(sk); 
05. 
06. 
07.    if (tcptw->tw_ts_recent_stamp && 
08.        (twp == NULL || (sysctl_tcp_tw_reuse && 
09.                 get_seconds() - tcptw->tw_ts_recent_stamp > 1))) { 
10.    

 << 上一页  [11] [12] [13] [14] [15] 下一页

  • 上一篇文章:

  • 下一篇文章: 没有了
  • 最新文章 热点文章 相关文章
    sharepoint 2010 获取用户信息Us
    设计包含max函数的队列
    随机从数组中取出指定的不重复的
    mysql主从同步延迟方案解决的学习
    青岛科学六年级下册教材分析
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    mysql主从同步延迟方案解决的学习
    生日旅行总结
    中小板生日快乐随感
    送生日快乐桑葚乳酪小蛋糕
    写给女儿的生日快乐
    总分公司财务核算
    恢复使用繁体字可行性研究报告
    保险受益人制度相关问题的探讨
    初中生地理读图能力培养的研究
    搞笑生日祝福
    The layout of PID & PORT i
    hadoop核心逻辑shuffle代码分
    The layout of PID & PORT i
    The layout of PID & PORT i
    The layout of PID & PORT i
    MapReduce错误任务失败处理 
    Oracle恢复内部原理(介质恢
    在 Oracle 中如何确定远程 s
    为什么RHEL 6上没有ASMLIB?
    sharepoint 2010 获取用户信
     



    设为首页 | 加入收藏 | 网站地图 | 友情链接 |