1、listen()函数介绍

listen函数使用主动连接套接口变为被连接套接口,使得一个进程可以接受其它进程的请求,从而成为一个服务器进程。在TCP服务器编程中listen函数把进程变为一个服务器,并指定相应的套接字变为被动连接。
listen函数在一般在调用bind之后-调用accept之前调用,它的函数原型是:

#include<sys/socket.h>
int listen(int sockfd, int backlog)

返回:0──成功, -1──失败

2、参数sockfd

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

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

不要以为backlog数目就是客户端连接的最大数目,切记。

linux网络编程之Listen函数参数介绍相关推荐

  1. linux ioctl网络参数设置,Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  2. 网络编程之 listen()函数的使用与三次握手的理解

    listen()函数 在进入我们的函数讲解前大家再回顾一下编写服务器端的流程 服务器端:socket()-->bind( )-->listen()-->accept()-->r ...

  3. 网络编程之listen函数

    基本TCP客户端/服务器程序的套接字函数 listen函数仅由TCP服务调用,它做两件事 1.当socket函数创建一个套接字时,它被假设为一个主动套接字,也就是说,它是一个将调用connect连接的 ...

  4. linux网络编程之setsockopt()函数来设置socket状态以及getsockopt函数只用总结

    1.setsockopt函数 头文件:#include <sys/types.h> #include <sys/socket.h>定义函数:int setsockopt(int ...

  5. Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解

    Linux网络编程之sockaddr与sockaddr_in,sockaddr_un结构体详细讲解 (1)sockaddr struct sockaddr { unsigned  short  sa_ ...

  6. Linux网络编程之TCP状态转移

    Linux网络编程之TCP状态转移 一.TCP状态转移时序 二.半关闭及shutdown函数 一.TCP状态转移时序 TCP状态转移图: netstat -apn | grep client 查看客户 ...

  7. linux读取文件修改时间函数,Linux服务器编程之utime()函数修改文件存取时间

    Linux服务器编程之utime()函数修改文件存取时间 C语言utime()函数:修改文件的存取时间和更改时间 头文件: #include #include 定义函数: int utime(cons ...

  8. Linux网络编程之IP地址转换为无符号整数的方法

    Linux网络编程之IP地址转换为无符号整数的方法,代码如下:(没考虑异常输入) #include <stdio.h> #include <string.h> #include ...

  9. linux网络编程之Socket编程

    (1)socket套接字 1)在linux环境下,socket用于表示进程间网络通信的特殊文件类型,其本质是内核借助缓冲区形成的伪文件(不占磁盘空间,除此之外还有二进制文件,管道,字符文件). 2)伪 ...

最新文章

  1. security cookie
  2. k8s之二进制安装etcd集群
  3. 光流 | 基于KLT(Kanade-Lucas-Tomasi)特征点跟踪算法(附代码,可扩展)
  4. Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素
  5. 制图折断线_甲级设计院CAD制图技巧与画法讲解! 超实用,值得你收藏~
  6. 运行Android Studio总是未发现设备
  7. vscode调试typescript
  8. GPS测量中所涉及的时间系统
  9. 论文查重系统原理是什么?
  10. 第一象限直线插补程序 c语言,直线插补算法流程(求助四个象限的直线插补程序)...
  11. 编译原理实验四 C-语言 语法分析程序
  12. 【RPA面试题】Q2. If Activity和Flow Decision的区别是什么?
  13. 怎么制作QQ背景音乐链接
  14. python裁剪图片并保存
  15. 关于大三学生的请教回复
  16. GPS天线类型和特点
  17. Centos查看端口及防火墙
  18. 程序员必备网站Collection~
  19. PAT 1121 Damn Single
  20. 一座小桥(最多只能承重两个人)横跨南北两岸,任意时刻同一方向只允许一个人过桥,南侧桥段和北侧桥段较窄只能通过一个人,桥中央一处宽敞,允许两个人通过或歇息。试用P(wait)V(signal)操作实现

热门文章

  1. 在 .NET 6 中使用 DATEONLY 和 TIMEONLY
  2. .Net Conf 2020 之回顾
  3. 2020年中国.NET开发者大会第二天 WorkShop
  4. Blazor.Server以正确的方式集成Ids4
  5. 【朝夕技术专刊】WebApi部署多服务器配置Nginx负载均衡
  6. 动手造轮子:写一个日志框架
  7. [功能发布]Excel催化剂地图可视化功能正式发布,欢迎使用!
  8. 从壹开始学习 NetCore 新篇章 ║ Blog.Core 开发社之招募计划书
  9. 持续集成之 Nuget 进阶
  10. [翻译] .NET Core 3.0 Preview 9 发布