socket API--listen

2024-03-13 17:18
文章标签 api socket listen

本文主要是介绍socket API--listen,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数原型

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

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

1.把一个未连接的socket转换成一个被动socket, 指示内核应接受指向该socket的连接请求,调用listen导致socket由CLOSED状态转换到LISTEN状态。

2.函数的第二个参数规定了内核应该为相应socket排队的最大连接个数。

listen函数通常应该在调用socket和bind后,并在调用accept之前调用。

参数简介

sockfdsocket描述符,标识一个socket.backlogsocket监听队列的长度,表示当前socket支持的最大待处理的连接请求数。

返回值

成功返回0; 错误返回-1,并设置errno.

backlog详解

内核为任何一个给定的TCP socket维护两个队列

1.未完成队列,每个SYN对应一项:已由某个客户端发出并到达服务器,而服务器在等待完成相应的TCP三路握手过程。这些socket处于SYN_RECVD状态。

2.已完成队列,每个已完成TCP三路握手过程的客户对应其中一项。这些socket处于ESTABLISHED状态

当来自客户的SYN到达时,TCP在未完成队列中创建一个新项,然后回复SYN/ACK。这一项一直保留在未完成队列中,直到客户端的ACK到达或超时为止。如果三路握手过程完成,该项被移到已完成队列的队尾。当进程调用accept时,已完成队列的头项将返回给进程,或者如果该队列为空,那么进程被阻塞。

关于这两个的队列的处理,有几点需注意:

  1. backlog指定了两个队列总和的最大值,但是这是与实现有关的,应与具体实现为准。
  2. 不要把backlog设为0,因为不同的实现对些有不同的解释。
  3. 对一人繁忙的服务器,backlog应指定一个较大的值。
  4. 当一人客户SYN到达时,若这些队列是满的,TCP会忽略该SYN. 对客户来说相当于没有回应。
  5. 三路握手完成后,但在服务器调用accept之前到达的数据由服务器TCP排队,最大数量为相应连接的接收缓冲区大小。

这篇关于socket API--listen的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/805592

相关文章

使用Go调用第三方API的方法详解

《使用Go调用第三方API的方法详解》在现代应用开发中,调用第三方API是非常常见的场景,比如获取天气预报、翻译文本、发送短信等,Go作为一门高效并发的编程语言,拥有强大的标准库和丰富的第三方库,可以... 目录引言一、准备工作二、案例1:调用天气查询 API1. 注册并获取 API Key2. 代码实现3

PHP应用中处理限流和API节流的最佳实践

《PHP应用中处理限流和API节流的最佳实践》限流和API节流对于确保Web应用程序的可靠性、安全性和可扩展性至关重要,本文将详细介绍PHP应用中处理限流和API节流的最佳实践,下面就来和小编一起学习... 目录限流的重要性在 php 中实施限流的最佳实践使用集中式存储进行状态管理(如 Redis)采用滑动

Go语言使用net/http构建一个RESTful API的示例代码

《Go语言使用net/http构建一个RESTfulAPI的示例代码》Go的标准库net/http提供了构建Web服务所需的强大功能,虽然众多第三方框架(如Gin、Echo)已经封装了很多功能,但... 目录引言一、什么是 RESTful API?二、实战目标:用户信息管理 API三、代码实现1. 用户数据

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四

SpringBoot结合Knife4j进行API分组授权管理配置详解

《SpringBoot结合Knife4j进行API分组授权管理配置详解》在现代的微服务架构中,API文档和授权管理是不可或缺的一部分,本文将介绍如何在SpringBoot应用中集成Knife4j,并进... 目录环境准备配置 Swagger配置 Swagger OpenAPI自定义 Swagger UI 底

使用Python的requests库调用API接口的详细步骤

《使用Python的requests库调用API接口的详细步骤》使用Python的requests库调用API接口是开发中最常用的方式之一,它简化了HTTP请求的处理流程,以下是详细步骤和实战示例,涵... 目录一、准备工作:安装 requests 库二、基本调用流程(以 RESTful API 为例)1.

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复