listen函数

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

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

intlisten(int sockfd, int backlog)

参数sockfd

被listen函数作用的套接字,sockfd之前由socket函数返回。在被socket函数返回的套接字fd之时,它是一个主动连接的套接字,也就是此时系统假设用户会对这个套接字调用connect函数,期待它主动与其它进程连接,然后在服务器编程中,用户希望这个套接字可以接受外来的连接请求,也就是被动等待用户来连接。由于系统默认时认为一个套接字是主动连接的,所以需要通过某种方式来告诉系统,用户进程通过系统调用listen来完成这件事。

参数backlog

这个参数涉及到一些网络的细节。进程处理一个一个连接请求的时候,可能还存在其它的连接请求。因为TCP连接是一个过程,所以可能存在一种半连接的状态,有时由于同时尝试连接的用户过多,使得服务器进程无法快速地完成连接请求。如果这个情况出现了,服务器进程希望内核如何处理呢?内核会在自己的进程空间里维护一个队列以跟踪这些完成的连接但服务器进程还没有接手处理或正在进行的连接,这样的一个队列内核不可能让其任意大,所以必须有一个大小的上限。这个backlog告诉内核使用这个数值作为上限。

毫无疑问,服务器进程不能随便指定一个数值,内核有一个许可的范围。这个范围是实现相关的。很难有某种统一,一般这个值会小30以内。(自己理解为:内核维护的一个queue,当用户进程accept比较慢时候,做缓冲功能)

Socket中listen相关推荐

  1. 简单分析一下socket中的bind

    在最开始接触bind的时候,只是在写基于tcp的server端的时候,知道在listen之前需要先bind一下,用来确保socket能在某个固定的端口监听.而bind的时候,函数参数中的端口填自己将要 ...

  2. linux网络编程二:基础socket, bind, listen, accept, connect

    linux网络编程二:基础socket, bind, listen, accept, connect 1. 创建socket #include <sys/types.h>     #inc ...

  3. PYTHON__关于Socket中的Select使用理解

    关于Socket中的Select使用理解 以下是代码和中文注释的个人理解 import socket, select, Queueserver=('192.168.2.100',10086)#创建TC ...

  4. socket中的TCP编程(调用免费聊天的机器人实现自动回复)

    socket中的TCP编程(调用免费聊天的机器人实现自动回复) 在无聊时间复习了socket编程,写了这个简易代码!!注意要在联网状态下跑 1:服务器模块: import socket import ...

  5. 网络编程(1)--socket/bind/listen/accept的简单介绍

    网络编程1--socket/bind/listen/accept的简单介绍 背景介绍 网络编程接口 socket bind listen accept 背景介绍 最近在学习APUE和Linux高性能服 ...

  6. 网络编程socket之listen函数

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

  7. backlog配置_详解socket中的backlog 参数

    backlog: an accumulation of uncompleted work or matters needing to be dealt with. (累计未完成的待处理事件) sock ...

  8. C++ tcpip网络编程中listen函数和accept函数详解和区别

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

  9. windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error...

    windows下配置redis集群,启动节点报错:createing server TCP listening socket *:7000:listen:Unknown error 学习了:https ...

最新文章

  1. 工业云计算在中国工业领域的发展与应用趋势
  2. 调试JavaScript/VB Script脚本程序(IE篇)
  3. mongodb java报授权,mongoDB 3.0用户创建与授权
  4. 使用CloudIDE搭建简单java环境
  5. 除夕年味年夜饭海报PSD素材,盛了一年的思念
  6. Hugging Face Course-Introduction学习小记 (part2)
  7. 全国省市区县数据库(大全)
  8. Oracle用户密码过期策略
  9. power-law 之Zipf
  10. 肢体语言识别系统OpenPose问世,它甚至能明白你的表情
  11. java代码到opcode_OPcode简介
  12. 万字长文讲述:任正非,“血洗”华为
  13. 招式与内功谈起——设计模式概述(一)
  14. 钟汉良日记:改变心态了,回武平待3年
  15. Tortoise commit提交模板配置
  16. Flutter与Android原生交互
  17. linux c 语言uint32 t,Linux中uint16_t
  18. 核密度估计(Kernel Density Estimation)和累积分布函数 (Cumulative Distribution Function)
  19. 【第一章】浅谈游戏作弊类型与核心原理
  20. 他选歌太纠结了,有时临比赛开始的前一天才能

热门文章

  1. 求求你别在用IF ELSE校验参数了
  2. 不是每个打工人都能享受 996 的福报
  3. B站疯传,一整套Java学习资料,白拿不谢,叫我雷锋!
  4. 关于HashCode方法,可变对象和内存泄漏问题
  5. json知识中的数据契约
  6. 目标检测 yolov1
  7. pix2pixHD笔记
  8. 安装MMCV和MMDET
  9. libtorch Tensor cannot be used as a tuple
  10. HTML5网页上播放mp4失败的原因