zoukankan      html  css  js  c++  java
  • TCP listen()函数内幕

    函数原型:

    1 int listen(int sockfd,int backlog);

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

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

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

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

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

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

  • 相关阅读:
    Linux菜鸟起飞之路【三】Linux常用命令
    Linux菜鸟起飞之路【二】Linux基本常识
    Linux菜鸟起飞之路【一】基本知识与Linux的安装
    交换机和路由器区别
    netdom join more ou
    keepalive.conf配置模板
    mysql7.7.22 Gtid主从搭建
    python 列表处理
    python openpyxl模块使用
    mysql5.7
  • 原文地址:https://www.cnblogs.com/coversky/p/7847009.html
Copyright © 2011-2022 走看看