news 2026/3/17 0:07:57

为什么accept要放在while循环中?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
为什么accept要放在while循环中?

1、概述

在看服务器相关代码,会看到类似代码,while循环不断调用accept(),为什么呢?
void CBaseSocket::_AcceptNewSocket()
{
SOCKET fd = 0;
sockaddr_in peer_addr;
socklen_t addr_len = sizeof(sockaddr_in);
char ip_str[64];
while ( (fd = accept(m_socket, (sockaddr*)&peer_addr, &addr_len)) != INVALID_SOCKET )
{
// 其他代码
}
}

2、分析

1、并发连接场景
accept函数是从服务端监听套接字的已完成连接队列中取出一个连接,返回一个新的socket来和客户端交互。如果短时间内有多个连接,这些连接会先进入已完成连接队列排队。如果只调用一次accept(),只能取走队列中的一个连接,剩下的连接会一直在队列中,客户端会超时或一直等待。


2、IO多路复用"边缘触发(ET)模式"
在epoll的ET模式下,当有新连接时,epoll只会通知一次,如果只调用一次accept(),而实际上队列里有多个连接,剩下的连接不会再触发epoll事件(ET模式不会重复通知),导致这些连接永远无法被处理。

while 循环的本质,就是在本次事件触发中,一次性处理完内核 “已完成连接队列” 里的所有待处理连接,直到队列为空为止。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/14 7:20:47

项目应用中AUTOSAR网络管理常见问题汇总

AUTOSAR网络管理实战避坑指南:从状态机到“乒乓唤醒”的深度解析一场由胎压传感器引发的深夜“心跳”凌晨两点,某车型在停泊测试中被监控系统捕捉到异常——整车电流每隔3秒就突然跃升至80mA,持续5秒后回落,如此循环长达20分钟。售…

作者头像 李华
网站建设 2026/3/14 14:26:35

紧急Bug处理:流程、四阶段控制法及工具方法

一、核心原则与分级标准紧急Bug处理的第一要务是控制影响,而非追求完美。必须建立明确的优先级判断标准,避免在压力下做出错误决策。四级分类法提供快速定级依据:P0致命级:核心业务中断,需立即停下手头一切工作处理&am…

作者头像 李华
网站建设 2026/3/13 11:34:15

[特殊字符]_可扩展性架构设计:从单体到微服务的性能演进[20260113164432]

作为一名经历过多次系统架构演进的老兵,我深知可扩展性对Web应用的重要性。从单体架构到微服务,我见证了无数系统在扩展性上的成败。今天我要分享的是基于真实项目经验的Web框架可扩展性设计实战。 💡 可扩展性的核心挑战 在系统架构演进过…

作者头像 李华
网站建设 2026/3/15 4:15:29

字节 2025 绩效考评开始,新调整来了!

大家好,我是鸭鸭! 字节一年两度的绩效考核要开始了。在字节的同学,应该上周四就收到了全员信:2026 年 1 月 15 日将启动全年绩效评估。 又到了发钱的时候!虽然不能进鸭鸭兜里,但想想还是有点小激动呢&…

作者头像 李华
网站建设 2026/3/12 19:59:13

车载电子PCB工艺选型要求:项目应用解析

车载电子PCB工艺选型实战指南:从设计到可靠的工程闭环为什么一块车规级PCB不能“照搬”消费类经验?你有没有遇到过这样的情况:同一块电路板,用在工控设备上稳定运行三年,放到发动机舱里却三个月就出现通信中断&#xf…

作者头像 李华
网站建设 2026/3/13 10:54:21

Excel VBA:精准选取与移动数据

引言 在处理大量Excel数据时,如何高效地选取特定条件的行并移动它们是一个常见的问题。今天我们将探讨如何使用VBA来实现这一目标,确保我们的代码既高效又易于维护。 背景 假设我们有一份Excel工作表,其中包含了大量的销售数据。我们需要找到…

作者头像 李华