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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • navigator html_javascript:_dopostback什么意思

    navigator html_javascript:_dopostback什么意思1.navigator属性以及方法解析:属性描述IEFOappCodeName返回浏览器的代码名。419appMinorVersion返回浏览器的次级版本。4NoNoappName返回浏览器的名称。419appVersion返回浏览器的平台和版本信息。4

    2022年9月4日
    3
  • Web Service应用之JAX-WS开发[通俗易懂]

    Web Service应用之JAX-WS开发[通俗易懂]1.什么是WebServiceWebservice是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。WebService服务通常被定义为一组模块化的API,它们可以通过网络进行调用,来执行远程系统的请求服务。2.WebService解…

    2022年7月15日
    17
  • QMediaPlayer的duration问题[通俗易懂]

    QMediaPlayer的duration问题

    2022年1月24日
    78
  • 点击导航栏,切换div内容(js+css+html)[通俗易懂]

    点击导航栏,切换div内容(js+css+html)[通俗易懂]**成果展示**代码展示:* <html> <head> <metacharset="utf-8"> <metahttp-equiv="X-UA-Compatible"content="IE=edge"> <title></tit

    2022年5月8日
    404
  • 百度快照更新周期、百度收录更新时间[通俗易懂]

    百度快照更新周期、百度收录更新时间[通俗易懂]很多做SEO的都不清楚百度快照的更新周期,所以很多时候都不能有针对性的对网站进行操作,错过了很多机会。百度收录的更新日期一般是每个月的11号和26号,特别是26号,更新最大,但K站也是最多的。另外百度也有一个小的更新的日期,即每周四凌晨4点左右,对网站的访问量没有什么效果,只有到了中午的日期,百度对网站关键字的搜索停止重新调整之后,才会有访问量上的大的变化,有升有降。总体上来说是大致为一个

    2022年9月27日
    0
  • Linux开机启动nginx「建议收藏」

    Linux开机启动nginx「建议收藏」在/etc/init.d下创建文件nginxvim/etc/init.d/nginxnginx官方脚本修改配置nginx=”/usr/local/nginx/sbin/nginx”#修改成nginx执行程序的路径NGINX_CONF_FILE=”/usr/local/nginx/conf/nginx.conf”#修改成nginx.conf文件的路径设置文件的执行权限chmoda+x/etc/init.d/nginx可以通过下面指令控制启动停止/etc/init..

    2022年10月6日
    1

发表回复

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

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