listen函数仅仅由TCP服务器调用,它做2件事:

1)当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字

listen函数把一个未连接的套接字转换成一个被动套接字,指示内核应接受指向该套接字的连接请求

调用listen导致套接字从CLOSED状态转换到LISTEN状态

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

int listen ( int sockfd, int backlog);

本函数在调用socket和bind这2个函数之后,并在调用accept函数之前调用

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

1)未完成连接队列

每个这样的SYN分节对应其中一项:

已由某个客户发出并到达服务器,而服务器正在等待完成相应的TCP三次握手过程,这些套接字处于SYN_RCVD状态

2)已完成连接队列

每个已完成TCP三次握手过程的客户对应其中一项:

这些套接字处于ESTABLISHD状态

每当在未完成队列中创建一项时,来自监听套接字的参数就复制到即将建立的连接中

连接的创建机制是完全自动的,无需服务器进程插手

当来自客户的SYN报文到达时,TCP在未完成连接队列中创建一个新的项目,然后相应以三次握手的第二个分节:

服务器的SYN保温相应,稍带对客户SYN报文的ACK

这一项一直保留在未完成连接队列中,直到三次握手的第三个分节到达或者该项超时为止,

该项就从未完成连接队列转移到以完成队列的队尾

当进程调用accept时,以完成连接队列中的队头项将返回给进程,

如果该队列为空,那么进程就将被投入睡眠,直到TCP在该队列中放入一项才唤醒它

listen函数的更多相关文章

  1. socket编程listen函数限制连接数的解决方案

    函数原型: int listen(int sockfd, int backlog); 当服务器编程时,经常需要限制客户端的连接个数,下面为问题分析以及解决办法: 下面只讨论TCP  UDP不做讨论(很 ...

  2. tcp/ip协议listen函数中backlog參数的含义

    listen函数的定义例如以下所看到的: #include <sys/socket.h> int accept(int sockfd, struct sockaddr * restrict ...

  3. listen()函数中backlog参数分析

    实例分析1 将服务器端的listen函数backlog设置为2,用20个客户端与服务器建立连接,查看连接的建立情况. 服务器代码: #include <stdio.h> #include& ...

  4. Python中网络编程对 listen 函数的理解

    listen函数的第一个参数时SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,就需要accept函数去进行检查了,accept函数的第一个参数也是SOCK ...

  5. 网络编程socket之listen函数

    摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被 ...

  6. listen() 函数

    声明:本文来自网络博文的合并,文后有链接. 一.listen函数仅由TCP服务器调用 它做两件事: 1.当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用conne ...

  7. 网络编程:listen函数

    listen函数仅由TCP服务器调用,它做两件事: 当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字.listen函数把一个未连 ...

  8. 网络编程学习笔记-listen函数

    listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接 ...

  9. Socket编程:listen()函数英文翻译

    作者:C语言达人 链接:https://zhuanlan.zhihu.com/p/24951131 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇翻译的list ...

随机推荐

  1. 第k大值01背包问题

    http://acm.hdu.edu.cn/showproblem.php?pid=2639 /* 第一行输入t 代表t组测试数据 第二行 输入物品个数 背包容量 要求的第k大值 物品的价值 物品的重 ...

  2. zookeeper 集群 Cannot open channel to X at election address Error contacting service. It is probably not running.

    zookeeper集群   启动 1.问题现象. 启动每一个都提示  STARTED 但是查看 status时全部节点都报错 [root@ip-172-31-19-246 bin]# sh zkSer ...

  3. Ubuntu中使用终端运行Hadoop程序

    接上一篇<Ubuntu Kylin系统下安装Hadoop2.6.0> 通过上一篇,Hadoop伪分布式基本配好了. 下一步是运行一个MapReduce程序,以WordCount为例: 1. ...

  4. Java 判断一段网络资源是否存在

    package cn.ycmedia.common.utils; import java.io.InputStream; import java.net.URL; import java.net.UR ...

  5. XMPPFrameWork IOS 开发(二)- xcode配置

    原始地址:XMPPFrameWork IOS 开发(二) 译文地址:   Getting started using XMPPFramework on iOS 介绍 ios上的XMPPFramewor ...

  6. TCP异常终止(reset报文)

    在之前做智能家居系统时,师弟做的服务端与WiFI盒子(客户端)进行通信时,总是出现异常情况,然后服务端不停地向客户端发送RESET报文,之前一直都不知道是什么情况,因此一直不知道是什么问题导致的,今天 ...

  7. NSString截取文件名(很笨的方法)

    对NSString的操作不熟悉,目前采用以下方法取得路径中的文件名以及文件夹路径 NSString* test=[[NSString alloc]initWithFormat:@"D:\\c ...

  8. 提升升级 强制更新 Download

    Activity和广播 /** 下载APK细节 1.点击升级后对话框不消失,再次点击时不能重复下载 2.下载过程中退出APP,下次进入应用后要重新下载(因为可能不完整) 3.下载过程中退出APP(或下 ...

  9. 开始学习编程了…… 2015年九月七日 …… 31岁的Me.

    给自己下的命令:做今天开始认认真真地开始学习编程,一年后的今天一定要找到一份编程的工作. 为什么要学编程?:因为不想回以前的圈子,“创业”快三年什么都给“创”没了,咳……,不过呢,倒是领略到编程能带来 ...

  10. 2015 Multi-University Training Contest 1 题解 BY FZUw

    题目链接:5288-5299 HDU5288 题解原文链接:我是链接