news 2026/6/10 11:00:41

Socket 编程核心:Accept 函数与三次握手的终章

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Socket 编程核心:Accept 函数与三次握手的终章

一、 阻塞的“守门员”

accept是一个非常典型的阻塞函数

  • 它的工作:盯着监听套接字(lfd)的读缓冲区。
  • 阻塞条件:如果读缓冲区里是空的(没人来连),accept就让程序停在这里,挂起等待,不消耗 CPU。
  • 解除阻塞:一旦有客户端完成了三次握手,内核会在读缓冲区里放一个请求。accept立刻醒来,处理这个请求。

注意:三次握手是由内核自动完成的,accept只是去“摘取”握手成功的果实。


二、 两个 FD 的故事:监听 vs 通信

这是初学者最容易晕的地方:accept会返回一个新的文件描述符。

  1. 监听描述符 (lfd)

    • 身份迎宾员
    • 数量:整个服务器通常只有1 个
    • 职责:只负责在门口站岗,把连接请求转给通信描述符,绝对不负责传输数据
  2. 通信描述符 (cfd)

    • 身份专属服务员
    • 数量:每连上一个客户端,就多1 个
    • 职责:专门负责和这个特定的客户端收发数据(read/write)。

三、 参数详解:谁连上了我?

intaccept(intsockfd,structsockaddr*addr,socklen_t*addrlen);
  • sockfd:那个唯一的监听描述符。
  • addr(传出参数):这是一个空盘子,由内核负责填满。函数返回后,里面就装了客户端的 IP 和端口(大端序)。如果不想知道是谁连的,可以传NULL
  • addrlen(传入传出参数)
    • 传入:告诉内核这个盘子有多大(sizeof(struct sockaddr_in))。
    • 传出:内核告诉实际填了多少字节。

四、 代码实战:获取客户端身份

下面的代码展示了如何使用accept接受连接,并把客户端的 IP 和端口打印出来。

1. 服务器代码 (accept_demo.c)

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

AI模型二手车市场:他人训练好的镜像直接租用

AI模型二手车市场:他人训练好的镜像直接租用 1. 什么是AI模型二手车市场? 想象一下你想买辆车,但预算有限又不想等漫长的生产周期。这时候二手车市场就派上用场了——别人已经磨合好的车,你付钱就能直接开走。AI模型二手车市场也…

作者头像 李华
网站建设 2026/6/6 16:06:06

Tag Editor终极指南:从快速上手到精通标签编辑

Tag Editor终极指南:从快速上手到精通标签编辑 【免费下载链接】tageditor A tag editor with Qt GUI and command-line interface supporting MP4/M4A/AAC (iTunes), ID3, Vorbis, Opus, FLAC and Matroska 项目地址: https://gitcode.com/gh_mirrors/ta/tagedit…

作者头像 李华
网站建设 2026/6/10 9:41:54

HunyuanVideo-Foley技术解析:端到端音效生成背后的原理

HunyuanVideo-Foley技术解析:端到端音效生成背后的原理 1. 技术背景与核心价值 随着短视频、影视制作和虚拟内容创作的爆发式增长,高质量音效的生产需求日益旺盛。传统音效制作依赖专业音频工程师手动匹配动作与声音,耗时耗力且成本高昂。尽…

作者头像 李华
网站建设 2026/5/31 21:29:02

完整专业歌词管理解决方案:高效获取网易云与QQ音乐LRC歌词

完整专业歌词管理解决方案:高效获取网易云与QQ音乐LRC歌词 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代,歌词作为音乐体验的重要…

作者头像 李华
网站建设 2026/6/9 22:12:57

云音乐歌词神器:3分钟学会批量获取网易云QQ音乐高质量歌词

云音乐歌词神器:3分钟学会批量获取网易云QQ音乐高质量歌词 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 还在为音乐播放器里光秃秃的歌词栏发愁吗&#xff…

作者头像 李华
网站建设 2026/6/10 3:18:03

终极音乐格式转换指南:3种技术方案实现跨平台播放自由

终极音乐格式转换指南:3种技术方案实现跨平台播放自由 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https…

作者头像 李华