listen函数
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函数的更多相关文章
- socket编程listen函数限制连接数的解决方案
函数原型: int listen(int sockfd, int backlog); 当服务器编程时,经常需要限制客户端的连接个数,下面为问题分析以及解决办法: 下面只讨论TCP UDP不做讨论(很 ...
- tcp/ip协议listen函数中backlog參数的含义
listen函数的定义例如以下所看到的: #include <sys/socket.h> int accept(int sockfd, struct sockaddr * restrict ...
- listen()函数中backlog参数分析
实例分析1 将服务器端的listen函数backlog设置为2,用20个客户端与服务器建立连接,查看连接的建立情况. 服务器代码: #include <stdio.h> #include& ...
- Python中网络编程对 listen 函数的理解
listen函数的第一个参数时SOCKET类型的,该函数的作用是在这个SOCKET句柄上建立监听,至于有没有客户端连接进来,就需要accept函数去进行检查了,accept函数的第一个参数也是SOCK ...
- 网络编程socket之listen函数
摘要:listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被 ...
- listen() 函数
声明:本文来自网络博文的合并,文后有链接. 一.listen函数仅由TCP服务器调用 它做两件事: 1.当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用conne ...
- 网络编程:listen函数
listen函数仅由TCP服务器调用,它做两件事: 当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect发起连接的客户套接字.listen函数把一个未连 ...
- 网络编程学习笔记-listen函数
listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程.在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接 ...
- Socket编程:listen()函数英文翻译
作者:C语言达人 链接:https://zhuanlan.zhihu.com/p/24951131 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 本篇翻译的list ...
随机推荐
- 简单的FIRST+集演示程序
/* * 该程序用于计算某个非终结符的 FIRST+ 集合 * RexfieldVon * 2013年6月30日16:02:47 */ #include <stdio.h> #includ ...
- 打造支持apk下载和html5缓存的 IIS(配合一个超简单的android APP使用)具体解释
为什么要做这个看起来不靠谱的东西呢? 由于刚学android开发,还不能非常好的熟练控制android界面的编辑和操作,所以我的一个急着要的运用就改为html5版本号了,反正这个运用也是须要从serv ...
- CSDN markdown 编辑器 第四篇 LaTex语法
Latex是为了写数学公式的. 嗯-但实际这样的语言的作用是为了排版的.数学公式仅仅是他的附加属性. 可是markdown引入这个全然是为了写公式.其它的Latex语法不支持. CSDN markdo ...
- 前端的数据库:IndexedDB 。 ps:入门
应用程序需要数据.对大多数Web应用程序来说,数据在服务器端组织和管理,客户端通过网络请求获取.随着浏览器变得越来越有能力,因此可选择在浏览器存储和操纵应用程序数据. 本文向你介绍名为IndexedD ...
- Content Provider Basics ——Content Provider基础
A content provider manages access to a central repository of data. A provider is part of an Android ...
- AsyncTask 解析
[转载自 http://blog.csdn.net/yanbober ] 1 背景 Android异步处理机制一直都是Android的一个核心,也是应用工程师面试的一个知识点.前面我们分析了Handl ...
- 数据库内存泄漏——A SQLiteConnection object for database '/data/data/.../databases/....db' was leaked!
详细异常: A SQLiteConnection object for database '/data/data/.../database/....db' was leaked! Please ...
- .NET读取Excel
1.代码 string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Path + ";Ext ...
- #BeginLibraryItem 的疑问...
<!-- #BeginLibraryItem "/library/ur_here.lbi" --><div style="padding:3px 15p ...
- flash与php 交互(as传参给php)
一种 不传参 直接读取PHP文件 btn.addEventListener(MouseEvent.CLICK,loadTxt);function loadTxt(evt:MouseEvent):voi ...