仅在调用write()函数时才能检测到未插入的以太网电缆 . 这是因为tcp堆栈的tcp重传没有你的意识 . 这是解决方案 .

即使您已经为应用程序套接字设置了keepalive选项,但是如果您的应用程序一直在套接字上写入,您无法及时检测到套接字的死连接状态 . 那是因为内核tcp堆栈的tcp重传 . tcp_retries1和tcp_retries2是用于配置tcp重传超时的内核参数 . 很难预测重传超时的精确时间,因为它是由RTT机制计算的 . 你可以在rfc793中看到这个计算 . (3.7 . 数据通信)

每个平台都具有用于tcp重传的内核配置 .

Linux : tcp_retries1, tcp_retries2 : (exist in /proc/sys/net/ipv4)

HPUX : tcp_ip_notify_interval, tcp_ip_abort_interval

AIX : rto_low, rto_high, rto_length, rto_limit

如果要提前检测死连接,则应为tcp_retries2(默认值为15)设置较低的值,但它仅为单个套接字设置这些值 . 那些是全局内核参数 . 有一些尝试为单个套接字应用tcp重新传输套接字选项(http://patchwork.ozlabs.org/patch/55236/),但我没有在系统头文件中找到这些选项定义 .

作为参考,您可以通过'netstat --timers'监控您的keepalive套接字选项,如下所示 . https://stackoverflow.com/questions/34914278

netstat -c --timer | grep "192.0.0.1:43245 192.0.68.1:49742"

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (1.92/0/0)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (0.71/0/0)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (9.46/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (8.30/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (7.14/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (5.98/0/1)

tcp 0 0 192.0.0.1:43245 192.0.68.1:49742 ESTABLISHED keepalive (4.82/0/1)

此外,当keepalive超时时,您可以根据您使用的平台遇到不同的返回事件,因此您不能仅通过返回事件来确定死连接状态 . 例如,当发生keepalive超时时,HP返回POLLERR事件,AIX仅返回POLLIN事件 . 那时您将在recv()调用中遇到ETIMEDOUT错误 .

在最近的内核版本(自2.6.37)中,您可以使用TCP_USER_TIMEOUT选项将运行良好 . 此选项可用于单个插槽 .

最后,您可以使用带有MSG_PEEK标志的read函数,它可以让您检查套接字是否正常 . (MSG_PEEK只是看看数据是否到达内核堆栈缓冲区并且从不将数据复制到用户缓冲区 . )因此,您可以使用此标志仅用于检查套接字是否正常,没有任何副作用 .

java socket 判断是否断开_Linux Socket:如何在客户端程序中检测断开的网络?相关推荐

  1. Linux断开进程的某个socket,Linux Socket:如何在客户端程序中检测断开的网络?

    我正在调试基于c的linux套接字程序.正如网站上提供的所有示例一样, 我应用了以下结构: sockfd= socket(AF_INET, SOCK_STREAM, 0); connect(sockf ...

  2. python socket recv超时_python使用多线程编写tcp客户端程序,你还没掌握吗?

    这篇文章主要为大家详细介绍了python使用多线程编写tcp客户端程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 在网上浏览的时候发现很多关于此题目的程序都只能接收数据,所以随便找了个程序研究 ...

  3. Java嵌入式数据库H2学习总结(二)——在Web应用程序中使用H2数据库

    一.搭建测试环境和项目 1.1.搭建JavaWeb测试项目 创建一个[H2DBTest]JavaWeb项目,找到H2数据库的jar文件,如下图所示: H2数据库就一个jar文件,这个Jar文件里面包含 ...

  4. java socket 判断断网_java socket 判断对方在线或离线、断线

    1 在客户端和服务器端做心跳检测(这个后来我放弃了) 2 客户端中断连接,服务器会抛出异常,利用这点 3这是我为什么不用心跳包的原因,因为不需要了. 有的时候,我们可能网络突然中断了. 但是服务器依然 ...

  5. java判断读到末尾_IO流如何判断读取到了流的结尾,程序中以-1来判断,是流中写入一个EOF表示流结束吗,底层实现呢?...

    -1不是流中写入的数据.read()方法返回的数据都是unsigned byte,即是[0,255].底层实现有很多,比如socket IO和文件IO,甚至你自己也可以实现. ------------ ...

  6. linux邮件收发程序流程图,[源码和文档分享]基于C语言和TCP Socket实现的Linux环境下的邮件收发客户端程序...

    一.项目题目及功能 项目题目:设计一个邮件收发客户端程序 功能:设置邮件账户.接收服务器和发送服务器等 接收邮件并显示在一个列表里 编写.发送新邮件 可暂不考虑邮件内容的编码/解码问题 删除邮件 邮件 ...

  7. linux c邮件客户端,[源码和文档分享]基于C语言和TCP Socket实现的Linux环境下的邮件收发客户端程序...

    一.项目题目及功能 项目题目:设计一个邮件收发客户端程序 功能:设置邮件账户.接收服务器和发送服务器等 接收邮件并显示在一个列表里 编写.发送新邮件 可暂不考虑邮件内容的编码/解码问题 删除邮件 邮件 ...

  8. java语义事件的含义_Java基础之处理事件——应用程序中的语义事件监听器(Sketcher 5 with element color listeners)...

    控制台程序. 为了标识元素的类型,可以为菜单已提供的4中元素定义常量,用作ID.这有助于执行菜单项监听器的操作,还提供了一种标识颜色类型的方式.我们会累积许多应用程序范围的常量,所以把它们定义为可以静 ...

  9. 系统在此应用程序中检测到基于堆栈的缓冲区_Linux 中的零拷贝技术

    转载:Linux 中的零拷贝技术,第 1 部分 引言 传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定 ...

最新文章

  1. ApplicationContext||ApplicationContext与BeanFactory的区别||SpringContextUtil类的作用
  2. rtp h264打包和解包
  3. Nginx负载均衡策略之ip_hash
  4. C#使用ListView更新数据出现闪烁解决办法
  5. 【Java】Java多线程神器:join使用及原理
  6. 苹果充电线android头断了,苹果充电线又坏了?其实一招就能搞定!还不花1分钱......
  7. oracle 10个表循环10次,oracle10g for 循环 嵌套
  8. 使用iframe的一些经验
  9. iptables 简介
  10. 测试用例思考:“用户登录”设置测试用例
  11. linux(中文输入法,显示语言)
  12. java 开源客服系统_一个开源的智能客服系统
  13. git(icode)分支及发布管理方式
  14. 《穷查理宝典》读书摘要和思维导图
  15. 20模3c语言中等于多少钱,科三模拟多钱
  16. 第二章:真分数理论(真分数模型:概念、假设、平行测验)
  17. 等保合规 等保监测 等保合规评测
  18. 真的是没有底线了,重新认识Java
  19. HTML lable标签
  20. 穹顶之下的出行利器:百度地图热力

热门文章

  1. 289B. Polo the Penguin and Matrix
  2. html简单父子页面,js 的 iframe 父子页面通信的简单方法
  3. Linux编程练习 --进程间通信2--两个管道实现双向通信
  4. 串口通讯编程一日通3(COMMTIMEOUTS DCB整理)
  5. matlab求零空间,matlab求矩阵的零空间的一组整数基,该怎样操作?
  6. java的国际化怎么用_Java有关国际化使用实例
  7. visual studio 没有属性页_驯龙物语10月14日更新|新增快捷购买页签
  8. 【转】带你玩转Visual Studio——04.带你高效开发
  9. 蜗牛星际 --【功耗测量】
  10. 一步步编写操作系统 39 二级页表1