[求助]socket编程一方突然断开连接,select方法失效问题

手写生产级TCP Socket通信骨架:从阻塞到select的实战指南 TCP Socket是网络编程的底层基石,其核心在于字节流传输、连接状态管理与系统资源控制。理解TCP粘包原理、TIME_WAIT机制、SO_REUSEADDR语义及非阻塞I/O模型,是构建高可靠通信服务的前提。这些技术直接决定边缘计算、物联网网关和低延迟中间件等场景下的连接稳定性与吞吐表现。本文聚焦真实生产环境——树莓派+Linux+Python组合,详解如何用原生socket写出可压测、可排障、可运维的TCP服务骨架,覆盖bind/listen/accept生命周期、recv循环边界处理、connect 阅读详情

    如题,当双方建立好通讯之后,用select方法监测套接字的可读,完全正常,但是如果有一方突然断线,对方的select方法就会失效,不知道什么原因?求解释!

    比如client端已经和serv段建立好连接了,serv方首先用select函数检测套接字是否可读,可读则用recv函数来接受消息,client方用send发送消息,此时client突然掉线,则serv方的select方法就会失效,即不再阻塞!

 

     select失效就是,如果客户端在发送数据时候突然掉线,此时客户端已经没有数据发送到服务器端,但是select监测的时候还是当有数据过来,并不阻塞。

 

    求大神指点这是什么原因?如何解决?

【GaussDB】连接池探活失效引发Socket未关闭问题解析与优化实践 本文深入解析了GaussDB数据库因会话超时机制与应用连接池探活失效导致的Socket未关闭与I/O error问题。通过分析数据库的session_timeout机制与连接池工作原理,提供了从日志排查到实战配置的完整解决方案,并针对Druid、Tomcat JDBC Pool及HikariCP等主流连接池给出了具体的保活参数优化建议,确保连接池心跳快于数据库回收节奏,从而根治此类连接失效问题。 阅读详情

相关推荐

ROS 入门教程:小乌龟仿真器和基础操作

小乌龟仿真器和ros基础操作

zlflll的博客 4127

细谈select函数(C语言)

      Select在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不

piaojun_pj的专栏 15万+

SmsForwarder v6.4.0 + Flask API 实战:5步搭建手机验证码自动化接收服务

本文详细介绍了如何利用SmsForwarder v6.4.0和Flask API构建企业级验证码自动化处理系统。通过5个关键步骤,包括系统架构设计、Android端配置、Flask服务端实现、企业级部署方案以及实战应用场景扩展,帮助开发者高效处理短信验证码,提升自动化测试和数据采集的工作效率。

weixin_30292745的博客 394

socket 的select函数block住了不返回timeout or error!原因在这里

#if 0    //fork a new process will cause thread run ( socket select() error or blocked!)     int pid=fork();     if (pid         exit(1);     else if (pid>0)         exit(0);     else //if (pid=

Power of technology will free your body and spirit 2201

【浅读论文-红外和可见光图像融合-CNN】Infrared and Visible Image Fusion using a Deep Learning Framework

1.这篇是2018年ICPR会议上发表的一篇文章1。博主个人觉得这算比较早期在VIF(红外光和可见光图像融合)中加入了深度学习这一模型的论文。2.这篇文章并不是完全使用深度学习的模型,模型主体在图像分解和融合仍然采用传统的方法,只有其中一个分支在特征提取和重建方面用到了VGG网络。3.论文地址4.代码地址本文提出了基于深度学习框架的一种新算法。本文提出使用下述论文中Image fusion with guided filtering2中的分解方法将源图像分解为基本部分和细节内容。

一枚博鼠的博客 1709

MYSQL、ORACLE、PostgreSQL数据库对象层次及权限管理对比

本文为出于自己扩展、比较、图形化的思维路径自行总结归纳,可能有些细节不太准确,欢迎指正。MySQL、Oracle、PostgreSQL关系型数据库都有管理员用户、用户、权限管理、表函数索引等数据库对象,schema。但在数据库对象隶属层次上有差异和相同的地方。

rachel_2016的博客 1490

c++中Socket通信函数之select

select函数决定一个或者多个套接字(socket)的状态,如果需要的话,等待执行异步I/O。 int select(               __in        int    nfds,               __inout    fd_set *readfds,               __inout  fd_set *writefds,

richerg85的专栏 1万+

【考研高数-高等数学-基础】第一章 函数、极限、连续

第一章 函数、极限、连续 第二章 导数与微分 第三章 微分中值定理及导数应用 第四章 不定积分 第五章 定积分与反常积分 第六章 定积分的应用 第七章 微分方程 第八章 多元函数微分学 第九章 二重积分 第十章 无穷级数 第十一章 向量代数与空间解析几何及多元微分学在几何上的应用 第十二章 多元积分学及其应用 难题: 极限的递推 微分中值定理的证明题 定积分的不等式和等式的证明 重积分的不等式和等式的证明 线面积分的不等式和等...

刘鑫磊 2035

C# 判断socket断开

C# 判断socket断开  标签: socket  断开  2008-04-17 17:31     在做就餐机PCCserver时,发现个问题,当客户端已经将socket正常关掉时,服务器端的socket.connected还是显示true,并没有判断出客户端断开,而C++就能够通过检测close事件,立刻判断出客户端断开。后来查阅资料发现,服务器端需要通过发送数据才能

zzy7075的专栏 8124

软考高级-系统架构设计师 知识点整理 (一篇就够了 建议收藏)

软考高级-系统架构设计师知识点整理---十万字总结,助你通过高级

片言可决讼,半纸能缚龙 7356

Python实现稳态传热传质的偏微分方程求解

通过这种方法,我们可以求解更复杂的传热传质问题,并对系统的温度和浓度分布进行分析和优化。稳态传热传质是一个重要的工程问题,涉及到物质在空间中的分布以及热量和质量的传递。每次迭代中,我们使用上一次迭代的温度值来计算下一次迭代的温度值。该图显示了平板内部各点的温度分布,其中中心温度为T1,边界温度为T2。接下来,我们创建一个N x N的温度矩阵,并将边界条件初始化为边界温度T2。假设我们有一个矩形平板,其中心温度为T1,四个边界温度为T2。假设平板的长度为L,宽度为W,中心温度为T1,边界温度为T2。

HackDashX的博客 308

Linux select函数问题 调用close关闭socket时,select并不会退出等待

最近在编写Linux下 视频代理服务器,在

学而时习之 4866

Fiori Elements 的 Adapting the UI: Analytical List Page 全解析与实战

摘要:本文详细介绍了如何通过SAP Fiori elements的UI Adaptation功能对Analytical List Page(ALP)进行细粒度适配。重点讲解了页头过滤区、图表区域、表格区域等关键组件的可配置属性,包括过滤区折叠/固定、图表类型限制、表格滚动阈值等实用功能。文章强调这些适配均可通过可视化工具完成,无需修改业务代码,并提供了典型场景的实践清单。适用于SAP Fiori elements for OData V2项目,建议配合SAP Fiori tools的Adaptation E

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 436

Windows下C++ Select模型Socket编程:从原理到Echo服务器实战

同步I/O复用是网络编程中的核心概念,它允许单个线程高效管理多个网络连接,通过监视套接字状态来避免为每个连接创建独立线程的开销。其工作原理基于操作系统内核提供的就绪通知机制,应用程序可以批量检查多个套接字的可读、可写或异常状态。这一技术价值在于显著提升资源利用率,降低上下文切换成本,是实现高并发服务器的基础模型,广泛应用于聊天服务器、游戏网关和轻量级代理等场景。在Windows平台,Select模型作为最基础的多路复用实现,其与Linux/Unix的差异、FD_SETSIZE限制以及非阻塞套接字处理是工程实

weixin_34152820的博客 345

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Socket select的用法

一、winsock中 #include 原型 int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,const

未语愁眸 1858

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

关于select socket error 10022

看下面代码是否有问题: struct timeval time; time.tv_sec = 0; time.tv_usec = 1000;     for(;;)     { if(g_bServerStart == false) goto cleanup;         retval = select(0, &readfds, NULL, NULL, &t

徐新华的专栏 6804

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Windows Socket 异步编程(非阻塞模式)

1. Windows平台提供了5种非阻塞Socket编程模型: Select模型(集合管理多个Socket,集合中有64个元素,可以管理1024个socket) WSAAsyncSelect模型(消息通知应用程序) WSAEventSelect模型(事件通知应用程序) 每次只能等待64个事件 重叠I/O模型(Overlapped I/O,事件通知和完成例程来通知应用程序) 事件通知即通...

weixin_30902675的博客 577

Socket select()用法

  一、winsock中#include 原型int select(int nfds,fd_set* readfds,fd_set* writefds,fd_set* exceptfds,const struct timeval* timeout);nfds:本参数忽略,仅起到兼容作用。   readfds:(可选)指针,指向一组等待可读性检查的套接口。  

zhaohongbo的专栏 830

LWIP调试指南:用select/poll定位Socket卡顿的7种武器

本文详细介绍了LWIP调试实战中的7种武器,帮助开发者精准定位Socket卡顿问题。从事件触发机制到netconn_flags逆向追踪,再到rcvevent计数异常诊断,提供了一套完整的调试方法论。结合VSCode+J-Link实时调试工具链,可快速解决数据已接收但select不唤醒等常见问题,提升嵌入式网络开发效率。

blockchain9miner的博客 708

C++ TCP Socket编程实践:从零实现本地消息广播服务器

网络编程是构建分布式系统的基石,其核心在于理解进程间通信的原理与实现。TCP协议通过三次握手建立可靠连接,并确保数据有序、无差错地传输,为众多上层应用提供了稳定基础。在技术价值层面,掌握底层Socket API能帮助开发者深入理解网络I/O模型、并发处理与资源管理,这是构建高性能服务的关键。应用场景广泛,从即时通讯、实时数据推送到多人在线游戏,都离不开高效的消息广播机制。本文通过一个本地化的TCP消息广播器项目,详细解析了如何使用C++和POSIX socket API实现服务端多客户端管理,并探讨了从阻塞

weixin_33733810的博客 1095

TCP.02.SELECT模型

文章目录SELECT模型简介SELECT模型流程SELECT原理SELECT代码实现fd_set 数组及基本操作SELECT函数 基于TCP/IP的网络编程还有5种模型: SELECT模型 事件选择模型 异步选择模型 重叠IO模型 完成端口模型 这次先讲第一种。 SELECT模型简介 针对多个客户端连接服务器时,服务器不能同时响应多个客户端的情况,SELECT模型就是用来解决服务器的accept、recv函数等待阻塞的问题的(客户端不需要使用这个模型)。注意这里函数执行时阻塞这个问题并没有解决,只是不等待阻

老毛的博客 2664

从select函数看LWIP协议栈设计:一个被忽略的socket编号陷阱如何搞垮你的UDP通信

本文深入剖析了在嵌入式网络开发中使用LWIP协议栈时,一个由select函数与socket描述符管理机制交互引发的UDP通信陷阱。文章通过分析TCP与UDP在select()中的不同事件处理模式,揭示了高编号socket可能意外覆盖低编号socket状态的根本原因,并提供了针对性的诊断、监控与解决方案,帮助开发者避免此类隐蔽的通信故障。

weixin_29260291的博客 516

socket select()使用

一、winsock中<br />#include <winsock.h><br />原型<br />intselect(<br />intnfds,<br />fd_set*readfds,<br />fd_set*writefds,<br />fd_set*exceptfds,<br />const struct timeval*timeout<br />);<br />nfds:本参数忽略,仅起到兼容作用。<br />   readfds:(可选)指针,指向一组等待可读性检查的套接口。<br />  

ychw365的专栏 1万+

socket select()用法

<br /><br />socket select()用法 <br />2007-11-15 18:53<br />一、winsock中 <br />#include <winsock.h><br />原型<br />int select(<br />int nfds,<br />fd_set* readfds,<br />fd_set* writefds,<br />fd_set* exceptfds,<br />const struct timeval* timeout<br />);<br />nfd

oathevil的专栏 735
上一篇: 关于linux中select 方法延迟问题-----当我while select 后
下一篇: 今天Linux内核3.3正式发布!集成安卓内核!这意味这…… (佩服发帖人)
memoryjs
博客等级 码龄18年 240粉丝 113原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值