首页 > 系统相关 >在Linux中使用 epoll 处理TCP连接断开问题

在Linux中使用 epoll 处理TCP连接断开问题

时间:2024-11-21 09:45:26浏览次数:3  
标签:setsockopt 断开 epoll TCP Linux sockfd sizeof 连接

在Linux中使用 epoll 处理TCP连接时,默认情况下无法直接检测到网线断开这类物理链路故障。

这是因为TCP协议栈的工作机制导致的。当网线断开后,本地TCP协议栈并不能立刻感知到连接已经不可用。在底层网络设备(如网卡)没有向TCP协议栈反馈链路故障的情况下,TCP连接会处于一种看起来仍然“正常”的状态,实际上数据已经无法传输了。

如果要检测这种情况,可以启用TCP的 Keep - Alive 机制。 Keep - Alive 是一种在TCP连接上定期发送探测包的机制。通过设置 SO_KEEPALIVE 套接字选项,可以让内核定期发送探测包来检查连接是否还存活。如果在一段时间内没有收到对方的响应,就可以认为连接已经断开。

示例代码(设置 SO_KEEPALIVE )如下:

int keepAlive = 1;
int keepIdle = 60;
int keepInterval = 5;
int keepCount = 3;
setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &keepAlive, sizeof(keepAlive));
setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPIDLE, &keepIdle, sizeof(keepIdle));
setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPINTVL, &keepInterval, sizeof(keepInterval));
setsockopt(sockfd, IPPROTO_TCP, TCP_KEEPCNT, &keepCount, sizeof(keepCount));

在上述代码中, sockfd 是套接字描述符。首先开启 SO_KEEPALIVE 选项,然后设置了 TCP_KEEPIDLE (连接空闲多久后开始发送探测包)、 TCP_KEEPINTVL (探测包发送间隔)和 TCP_KEEPCNT (探测失败多少次后认为连接断开)这几个和 Keep - Alive 相关的参数。

这样,当网线断开后,经过一段时间的探测,就可以通过 epoll 检测到连接断开事件(例如 EPOLLERR 或者 EPOLLHUP )。

标签:setsockopt,断开,epoll,TCP,Linux,sockfd,sizeof,连接
From: https://blog.csdn.net/qq_33471732/article/details/143933428

相关文章

  • Linux基础——BCLinuxOE21.10配置默认启动内核
    #查看内核菜单[root@harborkernel]#cat/boot/grub2/grub.cfg|grep"menuentry"if[x"${feature_menuentry_id}"=xy];thenmenuentry_id_option="--id"menuentry_id_option=""exportmenuentry_id_optionmenuentry'......
  • Linux基础——ISO修复kernel-4.19.0-grub问题:/boot文件损坏
    1、挂载bc8镜像#Trobleshooting进入2、进入修复模式3、进入救援模式4、切换用户根目录/mnt/sysimagechroot/mnt/sysroot/5、挂载ios镜像数据包mkdir-p/mnt/tempmount/dev/sr0/mnt/temp可以尝试以下两种挂载镜像方式iso9660文件系统mount-oiso9660/d......
  • 【Linux】僵尸进程、进程状态简介
    本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!如果对您有帮助,烦请点赞、关注、转发、订阅专栏!专栏订阅入口| 精选文章 | Kubernetes |Docker|Linux |羊毛资源 | 工具推荐 |往期精彩文章【Docker】(全网首发)KylinV10下MySQL容器内存占用异常的解决......
  • Thinkpad P14s 的 archlinux 成长手册(i3-wm 窗口管理器)
    目录电脑信息i3-wm快捷键分辨率调整终端版文件管理器壁纸设置触摸板配置合盖后不休眠i3配置文件截图工具剪切板i3lock-color卸载i3lock安装i3lock-color定义配置文件i3配置文件增加锁屏配置i3主题和图标修改i3工作区配置分配应用程序到工作区工作区字体修改i3启用透明效果......
  • [Linux]进程地址空间
    进程地址空间以32位机器为例程序地址空间地址空间描述的基本空间大小是字节,每个字节都要有为一的地址,所以在32位的机器下就会有2^32次方个地址,也就是4G的空间范围。这些空间被划分成为了一个个区域。范围是0x00000000-0xFFFFFFFF我们知道,在一个程序中变量或函数的地址分......
  • Linux使用finalshell连接的时候断开或者直接连接不上
    学习Linux这段时间,finalShell总是突然连接不上主机头几次出现这种情况的时候,我把主机重启,finalshell再打开突然就能连上了后边再出现的时候,我直接尝试重新连接,又能连接上了之后再次断开后,尝试多次重启重连都不行了,开始搜帖子找问题解决问题第一次,我在社区搜索很多帖子,发现有个......
  • 【Linux】开发工具(yum)
    为什么要用包管理器?(yum等)安装的步骤1.网络下载2.安装(就是往系统拷贝),必须使用root权限,安装到系统里,安装一次,任何人都能使用。(因为没有装到home里,而是装在系统里!)普通用户要使用软件,不论是可执行程序还是配置文件等,有r或x权限就行了。所以即使是拥有者和所属组都是root......
  • linux命令head,tail查询日志头部和尾部 & 查询日志的关键字的上下文日志方法
    linux命令head,tail查询日志头部和尾部&查询日志的关键字的上下文日志方法tail-n10test.log查询日志尾部最后10行的日志;tail-n-10test.log查询日志尾部最后10行的日志;同上tail-n+10test.log查询10行之后的所有日志;tail尾部,倒着数是负数。配置的是正数的话,则......
  • 信创的操作系统都是基于linux吗
    以下为智能搜索的内容:信创操作系统并不都是基于Linux进行二次开发的。根据搜索结果,国内信创操作系统主要以Linux为基础进行二次开发,但也有其他情况。以下是一些信创操作系统的相关信息:基于Linux的信创操作系统:国内信创类服务器操作系统主要分为开源社区版和商业版两大类。开......
  • windows下linux安装
    目录一、安装工具准备二、安装虚拟机1、双击VMware-workstation-full-17.0.0-20800274.exe进行安装,点击下一步2、在桌面找到VMware的图标双击运行,然后点击创建虚拟机3、安装镜像文件安装linux操作系统一、安装工具准备1、下载VMware安装包使用下面网盘连接或去官......