• TCP listen()函数内幕


    函数原型:

    1 int listen(int sockfd,int backlog);

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

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

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

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

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

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

  • 相关阅读:
    bzoj 3594: [Scoi2014]方伯伯的玉米田
    普通平衡树(指针splay)
    codeforces 475D. CGCDSSQ
    php 购物车功能
    PHP现阶段发现的不足点
    php 多维数据根据某个或多个字段排序
    redis可视化辅助工具
    Redis在window下安装以及配置
    hive数据操作
    hive 表分区操作
  • 原文地址:https://www.cnblogs.com/coversky/p/7847009.html
Copyright © 2020-2023  润新知