Linux ioctl FIONREAD 和select 使用
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 使用相关推荐
- 【原创】通过 ioctl + FIONREAD 判定数据可读
[原创]通过 ioctl + FIONREAD 判定数据可读 摩云飞 2016-05-12 09:57:51 浏览470 评论0 libevent ioctl FIONREAD 摘要: 在排查业务 b ...
- linux ioctl 设备操作函数 r3到r0 应用层 驱动层 通讯
一.ioctl的简介: 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数.如CD-ROM的驱动 ...
- linux平台IO多路复用 select接口使用例子
这几天在学习net-snmp源码,里面封装了很多select函数调用,这里记录一下linux上select的用法以及相关接口. 先看接口: //头文件 #include <sys/select. ...
- linux ioctl函数介绍
1. 概念 ioctl 是设备驱动程序中设备控制接口函数,一个字符设备驱动通常会实现设备打开.关闭.读.写等功能,在一些需要细分的情境下,如果需要扩展新的功能,通常以增设 ioctl() 命令的方式实 ...
- 引用 linux ioctl函数
http://vic295.blog.163.com/blog/static/74033530200991974322689/ 引用 linux ioctl函数 2009-10-19 19:43:22 ...
- Linux IOCTL
一.什么是IOCTL 首先,ioctl是一个系统调用. 二.IOCTL有什么用 1.应用场景 The major use of this is in case of handling some spe ...
- linux ioctl网络参数设置,Linux 网络编程之ioctl函数
1.介绍 Linux网络程序与内核交互的方法是通过ioctl来实现的,ioctl与网络协议栈进行交互,可得到网络接口的信息,网卡设备的映射属性和配置网络接口.并且还能够查看,修改,删除ARP高速缓存的 ...
- ioctl+FIONREAD判断文件可读
linux下判断一个文件描述符是否可读可用ioctl,参数FIONREAD,包含头文件unistd.h windows下有个类似的ioctlsocket,实现了ioctl的部分功能,也可以实现同样的功 ...
- Linux IO多路复用之Select简史
内容目录 前言早期的UnixTCP/IP诞生后终端复用套接字章节回顾结论引用 前言 最近我一直在思考 Linux 中的多路复用,即 epoll(7)[1]系统调用.我很好奇 epoll与Windows ...
最新文章
- numpy 数组 保留小数点后两位小数
- FLV文件中VideoPacket的详解
- 浅谈 SSD,eMMC,UFS
- Lync Server 2010所需媒体网络流量带宽详解和计算
- Spring Cloud之Feign客户端调用工具
- 3. XML 树结构
- 用计算机弹清明上河图谱,一篇文章让你看懂《清明上河图》中的所有细节
- python wmi 显卡型号_确定通过WMI运行的GPU
- Leetcode力扣 VS Code插件——面向新手
- Discuz!教程之门户列表页文章中无图片时,从图库中选择一张作为封面
- 全网首发?蚂蚁金服内部共享—1658页《Java面试突击核心讲》
- 基于Android NFC传感器读取身份证信息demo
- unity保存游戏对象到mysql_非常好用的游戏数据保存类:ScriptableObject
- 漫画行业有妖气:曾经的一哥,今日的难兄
- 【论文阅读】Multi-hop Question Answering via Reasoning Chains
- DSP与STM32的对比浅见(二)
- Ubuntu系统下增加中文字体
- 根据银行卡号判断所属银行(部分资源网上抄录)
- 逻辑回归-非线性判定边界Python代码实现
- 1一10到时的英文单词_1到10的英文单词-从1到10的英文-英语-庄影纬同学
热门文章
- padStart应用
- 企业高效办公之选 8500WN全能上网一键式推荐
- Python隐形马尔科夫实战_隐马尔科夫模型的Python3实现代码
- linux上SVN解决冲突命令
- bt客户端 linux 上传,linux下飞快的BT客户端rtorrent设置
- 降本增效的利器——组件化开发
- java jdk注解 使用_JDK中注解@Contended是干什么的?怎么使用?
- doc后缀/Excel 文件导出
- 二元线性回归的部分相关代码整理及说明。
- “机器学习实战”刻意练习——回归问题:线性回归(最小二乘、岭回归、逐步回归)