• TCP listen()函数内幕


    函数原型:

    1 int listen(int sockfd,int backlog);

    第二个参数规定了内核应该为相应套接字排队的最大连接个数

    为了理解其中的backlog 参数,我们必须认识到内核为任何一个给定的监听套接字维护着两个队列

    (1):未完成连接队列。每个这样的syn分节对应其中一项:已由某个客户发出到达服务器,而服务器正在等待完成相应的TCP三鹿握手的过程,这些套接字处于SYN_RCVD状态。

    (2):已完成连接队列。每个已经完成的三路握手的客户对应其中的一员,这些套接字处于ESTABLISHED状态。

    当来自客户的syn到达的时候,TCP在未完成连接队列创建一个新项,当三次握手全部正常完成的时候该项就从未完成队列离开,移到已连接队列的队尾,当进程下次调用accept的时候,已完成连接队列的对头将返回给调用进程,如果队列为空,那么进程将被投入睡眠,直到有新的数据项到来才唤醒他。

    对于backlog的最大值的问题,其值是可以修改的,指定一个很大的甚至大于内核所支持的值也是可以接受的,不过,内核会把该值设置成为自己能够支持的最大值。而不返回错误。

  • 相关阅读:
    A. Vasya and Book
    B. Curiosity Has No Limits
    A. Link/Cut Tree
    C. Yuhao and a Parenthesis
    D2. Magic Powder
    B. Approximating a Constant Range
    51nod1185 威佐夫游戏 V2 (模拟乘法)
    博弈论(巴什博奕,威佐夫博弈,尼姆博弈,斐波那契博弈)
    sg函数模板
    D.Starry的神奇魔法(矩阵快速幂)
  • 原文地址:https://www.cnblogs.com/coversky/p/7847009.html
Copyright © 2020-2023  润新知