TCP通信中客户端调用connect函数时非阻塞式处理
📅 2026/7/29 20:04:19
👁️ 次浏览
一. 简介本文简单学习一下TCP网络通信中客户端 connect函数时非阻塞实现。二. TCP通信中客户端调用connect函数时非阻塞式处理1. connect函数connect函数是 TCP 客户端用于与服务器建立连接的核心系统调用其作用是发起 TCP 三次握手建立与目标服务器的可靠连接。connect 函数是客户端 client 在连接服务器时进行连接时用的。2. TCP通信中客户端调用connect函数时非阻塞式处理非阻塞模式下connect会立即返回-1并设置errnoEINPROGRESSLinux或WSAEWOULDBLOCKWindows表示连接正在进行中需通过select/epoll等待结果。下面举例说明非阻塞模式下 connect函数的处理方式int nonblock_connect(const char *server_ip, int port) { int sockfd socket(AF_INET, SOCK_STREAM, 0); if (sockfd -1) { perror(socket failed); return -1; } // 设置套接字为非阻塞模式 int flags fcntl(sockfd, F_GETFL, 0); fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); struct sockaddr_in server_addr { .sin_family AF_INET, .sin_port htons(port) }; inet_pton(AF_INET, server_ip, server_addr.sin_addr); // 非阻塞 connect立即返回可能失败但需后续检查 int conn_ret connect(sockfd, (struct sockaddr*)server_addr, sizeof(server_addr)); if (conn_ret 0) { // 极少数情况连接立即建立本地连接 fcntl(sockfd, F_SETFL, flags); // 恢复阻塞模式可选 return sockfd; } if (errno ! EINPROGRESS errno ! EWOULDBLOCK) { // 非阻塞模式下的其他错误如地址无效 perror(nonblock connect failed immediately); close(sockfd); return -1; } // 用 select 等待连接完成超时 5 秒 fd_set writefds; FD_ZERO(writefds); FD_SET(sockfd, writefds); struct timeval timeout {5, 0}; // 5秒超时 int select_ret select(sockfd 1, NULL, writefds, NULL, timeout); if (select_ret 0) { // select 超时或失败 printf(connect timeout or select failed\n); close(sockfd); return -1; } // 检查连接是否成功通过 getsockopt 获取错误码 int error 0; socklen_t error_len sizeof(error); getsockopt(sockfd, SOL_SOCKET, SO_ERROR, error, error_len); if (error ! 0) { // 连接失败错误码为实际失败原因如 ECONNREFUSED printf(connect failed (SO_ERROR%d): %s\n, error, strerror(error)); close(sockfd); return -1; } // 连接成功恢复阻塞模式可选根据需求 fcntl(sockfd, F_SETFL, flags); return sockfd; }可以看出客户端 client 进行 非阻塞式 connect 连接时主要使用函数如下int fcntl(int fd, int cmd, ... /\* arg \*/ ); int select(int nfds, fd\_set \*readfds, fd\_set \*writefds, fd\_set \*exceptfds, struct timeval \*timeout);
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/29 20:03:19
今天给大家整理一套已经跑通爆款漫剧的万能提示词库!覆盖:豆包剧本人设词 + 分镜生成词 + 即梦绘图词 + 动态优化词 + 防翻车固定词直接复制粘贴,新手也能做出稳定、高清、统一、有质感的AI漫剧! 你是资深短视频漫剧编剧,擅长制作60秒竖屏爆款AI漫剧,请为我创作一集完整漫…
📅 2026/7/29 20:03:19
博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…
📅 2026/7/29 20:02:18
AI Agent接管运维安全吗?最小权限审计熔断设计指南
去年一家电商公司的运维Agent在执行常规清理脚本时,因为模型对指令的“理解偏差”,误删了生产环境的一个核心数据库——整个过程不到3秒,没有人类介入。事后复盘发现,…
📅 2026/7/29 20:52:37
PUBG罗技鼠标宏终极指南:用电脑视觉实现智能压枪 【免费下载链接】PUBG-Logitech PUBG罗技鼠标宏自动识别压枪 项目地址: https://gitcode.com/gh_mirrors/pu/PUBG-Logitech
在PUBG这类硬核射击游戏中,压枪技巧往往是区分高手与新手的决定性因素。…
📅 2026/7/29 20:52:37
BlueprintCommonControls实战:Button、Label与ScrollView组件全解析 【免费下载链接】Blueprint Declarative UI construction for iOS, written in Swift 项目地址: https://gitcode.com/gh_mirrors/blueprint6/Blueprint
Blueprint是一个基于Swift的iOS声明…
📅 2026/7/29 20:52:37
设备运维正在成为工业Agent落地最典型的场景之一,但“给设备系统接上大模型”并不意味着已经形成工业智能体。一种常见实现是,在设备产生报警之后,把报警码和相关设备手册交给大模型,由模型解释潜在原因并给出检查建议。这种方式能…
📅 2026/7/29 20:52:37
CyLR未来路线图:新功能预测与取证技术发展趋势分析 【免费下载链接】CyLR CyLR - Live Response Collection Tool 项目地址: https://gitcode.com/gh_mirrors/cy/CyLR
CyLR作为一款快速、安全且对主机影响最小的取证 artifacts 收集工具,专为NTFS…
📅 2026/7/29 20:52:37
英雄联盟终极效率工具:Akari助手完整使用指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit
还在为英雄联盟繁琐的游戏准备和实时…
📅 2026/7/29 20:51:37
解密Seq的核心功能:如何利用Pipeline实现高效基因组数据处理 【免费下载链接】seq A high-performance, Pythonic language for bioinformatics 项目地址: https://gitcode.com/gh_mirrors/se/seq
Seq作为一款高性能的生物信息学专用语言,其Pipel…
📅 2026/7/29 0:00:00
Flask-Blogging插件开发指南:打造属于你的个性化博客功能 【免费下载链接】Flask-Blogging A Markdown Based Python Blog Engine as a Flask Extension. 项目地址: https://gitcode.com/gh_mirrors/fl/Flask-Blogging
Flask-Blogging是一个基于Markdown的Py…
📅 2026/7/29 0:00:00
近日,国际专注开放式技术研发的声学品牌Nank南卡,正式官宣实力艺人曾舜晞担任品牌代言人。消息一经发出便轰动全网。为什么耳机品牌不选择流量明星、老牌歌手?而且是选择曾舜晞?让我们一起来探索一下!比起短期的流量&a…
📅 2026/7/29 0:01:00
更多请点击:
https://codechina.net
第一章:AI帮助理解数学概念 人工智能正以前所未有的方式重塑数学学习的路径。通过自然语言处理与符号计算的深度融合,AI不仅能解析抽象定义,还能将定理、证明和几何直觉转化为可交互、可验证的…
📅 2026/7/29 1:14:44
1. 项目背景与核心价值去年参与的一个短剧项目让我深刻体会到传统创作流程的痛点:编剧团队花了三周打磨剧本,角色设计反复修改了七版,最后成片时又因为演员档期问题不得不临时调整分镜。这种低效的创作模式在快节奏的内容行业越来越难以为继。…
📅 2026/7/29 1:14:44
remix-i18next TypeScript类型安全实践:确保翻译键与类型定义同步 【免费下载链接】remix-i18next The easiest way to translate your React Router framework mode apps 项目地址: https://gitcode.com/gh_mirrors/re/remix-i18next
在开发多语言应用时&am…
📅 2026/7/29 1:14:46
目录
第一步:选对模板,省心一半
第二步:打开扫码点餐功能
开启功能按钮
桌台管理与桌码生成
第三步:个性化设计,打造品牌感
调整点餐页面
设置点餐规则 你还在让顾客站着排队点餐吗?2025年ÿ…
📅 2026/7/29 7:15:11
在业务中快速构建一个能理解私有文档、准确回答专业问题的智能助手,是很多开发团队面临的共同挑战。传统方案往往需要从零开始搭建复杂的 RAG(检索增强生成)系统,涉及文档解析、向量化、检索、大模型调用等多个环节,整…
📅 2026/7/29 17:15:46
FAE放射组学分析工具:医学影像特征探索的完整解决方案 【免费下载链接】FAE FeAture Explorer 项目地址: https://gitcode.com/gh_mirrors/fae/FAE
你是否曾经面对海量医学影像数据感到无从下手?想要从CT、MRI等影像中提取有价值的定量特征&#…
📅 2026/7/29 5:15:05