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

listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:

#include<sys/socket.h>
int listen(int sockfd, int backlog)
返回:0──成功, -1──失败
参数sockfd
被listen函数作用的套接字,sockfd之前由socket函数返回。在被socket函数返回的套接字fd之时,它是一个主动连接的套接字,也就是此时系统假设用户会对这个套接字调用connect函数,期待它主动与其它进程连接,然后在服务器编程中,用户希望这个套接字可以接受外来的连接请求,也就是被动等待用户来连接。由于系统默认时认为一个套接字是主动连接的,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事。
参数backlog
这个参数涉及到一些网络的细节。在进程正理一个一个连接请求的时候,可能还存在其它的连接请求。因为TCP连接是一个过程,所以可能存在一种半连接的状态,有时由于同时尝试连接的用户过多,使得服务器进程无法快速地完成连接请求。如果这个情况出现了,服务器进程希望内核如何处理呢?内核会在自己的进程空间里维护一个队列以跟踪这些完成的连接但服务器进程还没有接手处理或正在进行的连接,这样的一个队列内核不可能让其任意大,所以必须有一个大小的上限。这个backlog告诉内核使用这个数值作为上限。
毫无疑问,服务器进程不能随便指定一个数值,内核有一个许可的范围。这个范围是实现相关的。很难有某种统一,一般这个值会小30以内。

当调用listen之后,服务器进程就可以调用accept来接受一个外来的请求。

网络编程socket之listen函数相关推荐

  1. 网络编程socket之accept函数

    网络编程socket之accept函数 摘要:对于服务器编程中最重要的一步等待并接受客户的连接,那么这一步在编程中如何完成,accept函数就是完成这一步的.它从内核中取出已经建立的客户连接,然后把这 ...

  2. 网络编程socket之connect函数

    网络编程socket api存在一批核心接口,而这一批核心接口就是几个看似简单的函数,尽管实际上这些函数没有一个是简单.connect函数就是这些核心接口的一个函数,它完成主动连接的过程. conne ...

  3. 关于网络编程socket的listen底层的一点理解

    #首先写一个socket,进入listen的源码,如下: def listen(self, backlog: int) -> None: .. >> #TODO the return ...

  4. Linux网络编程基础:listen函数

    listen函数 1)头文件 #include <sys/types.h> #include <sys/socket.h> 2)函数声明形式 int listen(int so ...

  5. Python网络编程(Socket)

    Python网络编程(Socket) Python提供了两个访问级别的网络服务.在一个较低的水平,您可以访问底层操作系统的基本套接字支持,允许你实现面向连接和无连接协议的客户端和服务器 Python有 ...

  6. Python网络编程socket

    网络编程之socket 看到本篇文章的题目是不是很疑惑,what is this?,不要着急,但是记住一说网络编程,你就想socket,socket是实现网络编程的工具,那么什么是socket,什么是 ...

  7. Linux 网络编程——socket 网络编程

    文章目录 一.网络基础 TCP/UDP对比 TCP/IP协议族体系 socket IP地址 IP地址转化API inet_addr() inet_aton() inet_ntoa() inet_pto ...

  8. 树莓派:入门(基础配置、GPIO、网络编程 Socket)

    树莓派在创客中越来越发挥重要的作用,树莓派的强大兼用性和功能丰富,得到 DIY 朋友的青睐.带大家认识目前最新的树莓派 3B+,从零基础到入门,到动手做有趣的应用. 本场 Chat 首先会带领大家入门 ...

  9. 树莓派 Python 网络编程 (Socket入门)

    树莓派  Python 网络编程 (Socket入门) 什么是 Socket? Socket又称"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络 ...

最新文章

  1. 用太极拳讲分布式理论,真舒服!
  2. firefox浏览器中silverlight无法输入问题
  3. php计算属性集的闭包,关于swift:计算属性与带闭包的属性集之间的区别
  4. 【GitHub】GitHub 的 Pull Request 和 GitLab 的 Merge Request 有区别吗?
  5. Python入门之中文乱码
  6. .NET5在开发平台上远优于Java,如何发挥优势?
  7. jboss加载组件_直接从JBoss AS 7组件使用JGroups
  8. Invalid connection string format, a valid format is: host:port:sid
  9. 关于Kernel的思考
  10. Google C++ 编程规范总结
  11. Java中== equals hashcode浅析[转]
  12. 步进驱动器简单接线说明书
  13. 多旋翼无人机动力、运动学建模及仿真
  14. 蓝桥杯基础练习 杨辉三角形Python实现
  15. 34个有用的 JavaScript 库,现在就可以用起来
  16. OS篇-Bochs在Ubuntu下的安装教程
  17. 热插拔技术详解(上)
  18. 300个VB全面控制Excel方法
  19. 《项目管理知识体系指南》(PMBOK®指南)第3 版
  20. [OHIF-Viewers]医疗数字阅片-医学影像-Cornerstone Tools

热门文章

  1. 酒店行业如何创造更好的客户体验?
  2. Android 双卡发送短信
  3. 重庆交通大学程序设计竞赛集训队暑假第二次练习赛——题解
  4. 使用OCT将office序列号封装到安装文件中
  5. NPOI复制Excel工作簿Sheet以及删除Excel工作簿
  6. Windows错误代码 (Bitlocker)
  7. 视频教程-Python数据分析与挖掘-Python
  8. FZU2167大王叫我来巡山呐
  9. 华为交换机,路由器升级版本
  10. 【MATLAB】机器学习: 线性回归实验(梯度下降+闭式解)