当前位置: 首页 > news >正文

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
http://www.cnnetsun.cn/news/610786.html

相关文章:

  • 医疗AI容灾方案:Holistic Tracking云端多可用区部署
  • AnimeGANv2教程:批量处理照片的效率优化
  • 零基础教程:用[特殊字符] AI 印象派艺术工坊轻松制作专业级艺术照
  • AI智能文档扫描仪避坑指南:这样拍效果最好
  • Happy Island Designer岛屿规划终极完整教程:从零开始打造梦想岛屿
  • HunyuanVideo-Foley文档生成:Sphinx自动生成API参考手册
  • Unlock Music完整指南:5步轻松解锁加密音乐文件,实现跨平台自由播放
  • Tiny11Builder:Windows 11轻量化构建的完整解决方案
  • HunyuanVideo-Foley源码解读:音效生成核心模块拆解教程
  • AnimeGANv2公益项目应用:留守儿童心愿动漫化实现过程
  • 从拍照到扫描:AI智能文档扫描仪完整使用流程演示
  • 零基础教程:无需模型依赖,用OpenCV镜像秒变照片为艺术品
  • 音乐文件解密终极指南:轻松解锁各类加密格式
  • AnimeGANv2效果优化:调整参数获得不同动漫风格的技巧
  • VibeVoice-TTS显存不足怎么办?轻量级部署优化方案
  • VibeVoice-TTS显存不足怎么办?GPU优化部署解决方案
  • 5分钟上手AI智能文档扫描仪:零基础实现文档自动矫正
  • 【云原生稳定性提升秘籍】:3步打造容器自愈系统
  • 实例分割新突破:DINOv2与Mask2Former强强联合的实战指南
  • 零信任时代下的容器安全,你真的配对了权限吗?
  • HunyuanVideo-Foley安全合规:音效版权风险规避建议
  • HunyuanVideo-Foley情感识别:根据画面情绪匹配悲喜音效
  • 明日方舟基建自动化终极指南:5分钟告别手操时代
  • HunyuanVideo-Foley科研辅助:行为识别实验中的音效模拟
  • 跨境远程办公:多时区团队共享GPU,成本自动分摊
  • 【容器镜像安全终极防线】:揭秘签名验证核心技术与落地实践
  • VibeVoice-WEB-UI云端部署:公有云私有化方案对比
  • 照片动漫化用户体验优化:加载动画与提示语设计
  • AnimeGANv2参数详解:风格强度与分辨率优化实战手册
  • 【容器资源占用监控】:揭秘90%开发者忽略的5大性能瓶颈