Linux ioctl FIONREAD 和select 使用

使用select 与ioctl判断socket client是否断开的方式
(1)ioctl + FIONREAD
int nsel = select(maxfd+1, &(rfds), NULL, NULL, &timeout);
if(-1 != ioctl(clientfd, FIONREAD, &nread)){
if(nread != 0) {
result = readable;
} else {
result = disconnect;
}
}
以这种方式判断的话,必须保证read或者recv的操作在iocl之后,如果read或者recv的操作在ioctl之前或者在其他线程里面,则有可能出现ioctl中 nread的值为0的情况
原因: ioctl判断的是socket中接收缓冲区中的可读数据的size,read或者recv操作会从内核中socket的缓冲区中读取数据,执行读取操作后,内核缓冲区的数据的额size可能为0, 如果这时候结合ioctl 中的nread进行判断socket是否断开,则会出现误判。
对端socket并没有断开,至少缓冲区的数据被读取了。

Linux ioctl FIONREAD 和select 使用相关推荐

  1. 【原创】通过 ioctl + FIONREAD 判定数据可读

    [原创]通过 ioctl + FIONREAD 判定数据可读 摩云飞 2016-05-12 09:57:51 浏览470 评论0 libevent ioctl FIONREAD 摘要: 在排查业务 b ...

  2. linux ioctl 设备操作函数 r3到r0 应用层 驱动层 通讯

    一.ioctl的简介: 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数.如CD-ROM的驱动 ...

  3. linux平台IO多路复用 select接口使用例子

    这几天在学习net-snmp源码,里面封装了很多select函数调用,这里记录一下linux上select的用法以及相关接口. 先看接口: //头文件 #include <sys/select. ...

  4. linux ioctl函数介绍

    1. 概念 ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开.关闭.读.写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实 ...

  5. 引用 linux ioctl函数

    http://vic295.blog.163.com/blog/static/74033530200991974322689/ 引用 linux ioctl函数 2009-10-19 19:43:22 ...

  6. Linux IOCTL

    一.什么是IOCTL 首先,ioctl是一个系统调用. 二.IOCTL有什么用 1.应用场景 The major use of this is in case of handling some spe ...

  7. linux ioctl网络参数设置,Linux 网络编程之ioctl函数

    1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...

  8. ioctl+FIONREAD判断文件可读

    linux下判断一个文件描述符是否可读可用ioctl,参数FIONREAD,包含头文件unistd.h windows下有个类似的ioctlsocket,实现了ioctl的部分功能,也可以实现同样的功 ...

  9. Linux IO多路复用之Select简史

    内容目录 前言早期的UnixTCP/IP诞生后终端复用套接字章节回顾结论引用 前言 最近我一直在思考 Linux 中的多路复用,即 epoll(7)[1]系统调用.我很好奇 epoll与Windows ...

最新文章

  1. numpy 数组 保留小数点后两位小数
  2. FLV文件中VideoPacket的详解
  3. 浅谈 SSD,eMMC,UFS
  4. Lync Server 2010所需媒体网络流量带宽详解和计算
  5. Spring Cloud之Feign客户端调用工具
  6. 3. XML 树结构
  7. 用计算机弹清明上河图谱,一篇文章让你看懂《清明上河图》中的所有细节
  8. python wmi 显卡型号_确定通过WMI运行的GPU
  9. Leetcode力扣 VS Code插件——面向新手
  10. Discuz!教程之门户列表页文章中无图片时,从图库中选择一张作为封面
  11. 全网首发?蚂蚁金服内部共享—1658页《Java面试突击核心讲》
  12. 基于Android NFC传感器读取身份证信息demo
  13. unity保存游戏对象到mysql_非常好用的游戏数据保存类:ScriptableObject
  14. 漫画行业有妖气:曾经的一哥,今日的难兄
  15. 【论文阅读】Multi-hop Question Answering via Reasoning Chains
  16. DSP与STM32的对比浅见(二)
  17. Ubuntu系统下增加中文字体
  18. 根据银行卡号判断所属银行(部分资源网上抄录)
  19. 逻辑回归-非线性判定边界Python代码实现
  20. 1一10到时的英文单词_1到10的英文单词-从1到10的英文-英语-庄影纬同学

热门文章

  1. padStart应用
  2. 企业高效办公之选 8500WN全能上网一键式推荐
  3. Python隐形马尔科夫实战_隐马尔科夫模型的Python3实现代码
  4. linux上SVN解决冲突命令
  5. bt客户端 linux 上传,linux下飞快的BT客户端rtorrent设置
  6. 降本增效的利器——组件化开发
  7. java jdk注解 使用_JDK中注解@Contended是干什么的?怎么使用?
  8. doc后缀/Excel 文件导出
  9. 二元线性回归的部分相关代码整理及说明。
  10. “机器学习实战”刻意练习——回归问题:线性回归(最小二乘、岭回归、逐步回归)