ioctl() FIONREAD 检测socket是否有数据可读
先看看FIONREAD 的作用
FIONREAD:
Get the number of bytes in the input buffer 获取接收缓存中数据的字节数
项目中用来判断tcp socket是否有数据接收到,但是出现了一个问题,对于用于accept的socket 即调用listen()之后的socket,用FIONREAD,判断的时候报错,ioctl()返回-1,错误码是 22,无效的参数错误。
为什么会出现这个问题?
我做过测试刚创建好的socket 和 调用过bind()的socket ioctl 都可以判断,只有listen()之后才会报错。
于是就查了一下 socket创建过程,总结了一下
1.socket创建之后是主动(暂且这么翻译吧),listen之后就变为被动,只能等待connect。
listen() marks the socket referred to by sockfd as a passive socket
2.socket创建之初的状态是UNCONNECT, listen之后就变为LISTEN状态。
3.listen()调用之后,维护的是未完成连接和完成连接两个队列,socket也会被放置到队列里。
4.connect 创建新的socket用于和客户端通讯。
FIONREAD用于判断接收缓存中是否存在可读数据,用于accept的socket处于LISTEN状态,只能被动接受连接,实际上已经没有IO了,不能用FIONREAD去判断socket是否有连接,ioctl认为它是个无效的参数。
如果总结的不对,可评论或私信,会及时纠正!
ioctl() FIONREAD 检测socket是否有数据可读相关推荐
- 【原创】通过 ioctl + FIONREAD 判定数据可读
[原创]通过 ioctl + FIONREAD 判定数据可读 摩云飞 2016-05-12 09:57:51 浏览470 评论0 libevent ioctl FIONREAD 摘要: 在排查业务 b ...
- Linux ioctl FIONREAD 和select 使用
Linux ioctl FIONREAD 和select 使用 使用select 与ioctl判断socket client是否断开的方式 (1)ioctl + FIONREAD int nsel = ...
- 为什么socket接收大数据的时候接收不完全,出现丢包?
为什么socket接收大数据的时候接收不完全,出现丢包? (1)TCP协议通信,接收方接收数据的前后次序与发送方一致,但数据包不一定一致.打个比方,发送方按顺序发送了2个数据包,接收可能仅接收1次就能 ...
- linux socket接收不到16进制数据,C下通过socket收发十六进制数据解决办法
C下通过socket收发十六进制数据 系统是在LINUX下,下位机发送十六进制数据过来 上位机怎么解析 把数据以十六进制的形式显示出来,发送十六进制又如何实现 ------解决方案---------- ...
- 【python】-- Socket接收大数据
Socket接收大数据 上一篇博客中的简单ssh实例,就是说当服务器发送至客户端的数据,大于客户端设置的数据,则就会把数据服务端发过来的数据剩余数据存在IO缓冲区中,这样就会造成我们想要获取数据的完整 ...
- php socket发数据打印,PHP向socket服务器收发数据的方法
这篇文章主要介绍了PHP向socket服务器收发数据的方法,分析了socket收发数据的方法,并介绍了socket常用函数,需要的朋友可以参考下 本文实例讲述了PHP向socket服务器收发数据的方法 ...
- 【目标检测】(10) Mosaic 数据增强方法,附Python完整代码
各位同学好,今天和大家分享一下目标检测算法中常用的图像数据增强方法 Mosaic.先放张图看效果.将四张图片缩放后裁剪拼接在一起,并调整检测框的坐标位置,处理位于图像边缘的检测框.文末有完整代码 1. ...
- python实现目标检测voc格式标签数据增强
文章目录 前言 一.显示图片(可关闭) 二.创建图像变换的类 1.增强数据代码 2.图像加噪声 3.调整图像亮度 4.添加黑色像素块 5.旋转图像 6.图像裁剪 7.平移图像 8.图像镜像 9.图像随 ...
- Java Socket正确读取数据姿势
前言 平时日常开发用得最多是Http通讯,接口调试也比较简单的,也有比较强大的框架支持(OkHttp). 个人平时用到socket通讯的地方是Android与外设通讯,Android与ssl服务通讯, ...
最新文章
- CSS实现超过一定的宽度添加省略
- 兄弟,用大白话给你讲小白都能看懂的分布式系统容错架构
- 【LeetCode】最大子序和
- Winform中怎样获取项目图片资源并转换为Image对象
- 模板类可以使用虚函数,模板函数不能是虚函数
- 十九. Python基础(19)--异常
- 八、pink老师的学习笔记—— CSS用户界面样式(鼠标样式、轮廓线、防止拖拽文本域)
- 带通滤波中零相位和最小相位_相位器在Perl 6中的工作方式
- 中间环节越多,大家就越赚钱?
- 不用找了,基于 Redis 的分布式锁实战来了
- win10安装MySql教程
- 虚拟机下安装BackTrack5 (BT5)教程及BT5汉化
- 高中数学建模优秀论文_高中数学建模优秀论文大纲格式 高中数学建模优秀论文大纲怎么写...
- visio如何忽略跳线|跨线
- E盾网络验证企业版个人版离线版加密防破解易语言源码加密对接好的自绘界面2
- .axf文件_MDK 的编译过程及文件类型全解(一)
- 哪吒票房超复联4,100行python代码抓取豆瓣短评,看看网友怎么说
- Docker 占用磁盘空间清理
- php 判断时间是星期几,通过PHP的date()函数判断今天是星期几
- Java连接打印机打印二维码
热门文章
- padStart padEnd
- 票务系统需求的服务器数量要求,陕西旅游景区票务系统方案报价
- 云开发超多功能工具箱组合微信小程序源码/附带流量主
- 计组 | 字长大杂烩——字、位、字节等基本概念、按字寻址与按字节寻址
- 那些程序员爆笑段子,扎心了…
- 基于kendryte K210 的Sipeed M1W上电
- Error in install.packages : Updating loaded packages WARNING: Rtools is required to build R packages
- 模拟IIC的时钟延展问题(Clock Stretching)
- 对称加密和非对称加密总结
- 科目三考试总结--附送马陆驾校考点路线图