Linux ioctl FIONREAD 和select 使用

Linux ioctl FIONREAD 和select 使用LinuxioctlFIONREAD和select使用使用select与ioctl判断socketclient是否断开的方式(1)ioctl+FIONREADintnsel=select(maxfd+1,&(rfds),NULL,NULL,&timeout);if(-1!=ioctl(clientfd,FIONREAD,&nread)){if(nread!=0){result=readable;}else{resul

大家好,又见面了,我是你们的朋友全栈君。

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并没有断开,至少缓冲区的数据被读取了。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163631.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 友邻

    友邻

    2021年9月8日
    162
  • C# 多线程编程

    C# 多线程编程1.如果只是启动一个新线程,不需要传入参数,不需要线程返回结果,可以直接使用ThreadStart(),Thread类接收一个ThreadStart委托或ParameterizedThreadSta

    2022年7月2日
    21
  • idea快捷键整理代码_idea中快捷键

    idea快捷键整理代码_idea中快捷键IDEA常用快捷键

    2022年10月12日
    3
  • loadrunner 压力测试工具下载

    loadrunner 压力测试工具下载loadrunner下载 http://willvvv.iteye.com/blog/1198158 用户名密码: user1  user1

    2022年7月17日
    15
  • Altium Designer2018下载安装及基本使用[通俗易懂]

    Altium Designer2018下载安装及基本使用[通俗易懂]一、AltiumDesigner2018下载下载链接:https://pan.baidu.com/s/1gVJre-0tW_T2_oRqclYWAQ提取码:fnr9安装步骤请点我!2、用AD画基本的电路图1.首先新建一个PCB工程。如下所示:2.新建一个原理图如下所示:3.导入基本的元件库4.查找所需元件(这里以查找电阻为例)以下给出了一些常用元件的查找字母(…

    2022年7月13日
    42
  • scrapy框架入门实例_jeecg框架入门

    scrapy框架入门实例_jeecg框架入门一、概述Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试.其最初是为了页面抓取(更确切来说,网络抓取)所设计的,后台也应用在获取API所返回的数据(例如AmazonAssociatesWebServices)或者通用的网络爬虫.Scrapy吸引人的地方在于它是一个框架,任何人都可以根据需求方便的修改。它也提供了多种类型爬虫的基类,如BaseS

    2022年8月30日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号