当前位置:  技术问答>linux和unix

select和非阻塞socket的迷惑

    来源: 互联网  发布时间:2016-02-18

    本文导语:  关于非阻塞和阻塞的socket有点疑惑。 如果fd1是一个阻塞的socket,我将它加入select的readset中,然后用select去侦听fd1上是否有数据到来。我感觉这和非阻塞socket的性质是一样的,因为它不会阻塞在fd1的recv函数上,因为之...

关于非阻塞和阻塞的socket有点疑惑。
如果fd1是一个阻塞的socket,我将它加入select的readset中,然后用select去侦听fd1上是否有数据到来。我感觉这和非阻塞socket的性质是一样的,因为它不会阻塞在fd1的recv函数上,因为之前select已经判断到fd1可读,所以recv就会返回不会阻塞。
那么为什么大家总要还要创建一个非阻塞的socket加入select中呢?难道是因为socket读写效率问题?还是有其他原因。

|
关于非阻塞和阻塞的socket有点疑惑。
如果fd1是一个阻塞的socket,我将它加入select的readset中,然后用select去侦听fd1上是否有数据到来。我感觉这和非阻塞 socket的性质是一样的,因为它不会阻塞在fd1的recv函数上,因为之前select已经判断到fd1可读,所以recv就会返回不会阻塞。
那么为什么大家总要还要创建一个非阻塞的socket加入select中呢?难道是因为socket读写效率问题?还是有其他原因。


-----------------------------------------------------------------------------------------------
是这样的,虽然你select判断了是可读的,但是没法判断能读多少数据,比如说,只到了3个字节的数据,而你要读取10个字节的,那就会阻塞在那.
阻塞和非阻塞的区别,不在于你用select判断时,而是在读/写数据时才起作用.

|
楼上正解,但是对于“比如说,只到了3个字节的数据,而你要读取10个字节的,那就会阻塞在那.”有不同看法,只在调用recv(int s, void *buf, size_t len, int flags)的flags参数设置了MSG_WAITALL才会阻塞,否则会返回已经到达的数据。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • socket通讯使用select的问题
  • socket select异常?
  • socket编程select对accept的影响
  • 请教linux下管理多个socket用什么,难道只能用select?
  • socket select()能否取得剩余时间
  • socket编程中的select问题
  • socket中的select模型问题
  • linux下用C写socket程序编程中的select里面的timeout的值的单位到底是什么?
  • 我做了个socket服务器,但是客户端接收数据的时候用select()函数????可接受不到
  • socket的select使用超时的问题
  • 【请教】Linux下用select()监测socket,是不是通常不去监测可写状态的?
  • 哪位高手给个unix系统下C语言socket+fork()+select()的例子?
  • 一个未连接的客户端socket套接字在select处的奇怪行为
  • 求助,关于linux下socket的select模式编程
  • socket编程中select()的用法,请给一个原代码!
  • 程序用socket和select导致ubuntu脱网
  • 服务器端关闭,客户端select 会一直可读, 读的长度是-1,怎么在不关闭客户端socket下,清除可读
  • socket中select函数求救
  • socket通信时,select一直返回超时的问题
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selected定义及介绍
  • 究竟怎么样取得的<select name="select_user" size="8" multiple>值
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selectable定义及介绍
  • man select 结果返回 No manual entry for select
  • java命名空间javax.swing.tree类defaulttreeselectionmodel的类成员方法: selection定义及介绍
  • select <0时调用exit(0),为什么程序没有退出,而是继续执行select了?
  • java命名空间javax.swing.tree类defaulttreecellrenderer的类成员方法: selected定义及介绍
  • insert into select和select into的使用和区别介绍
  • java命名空间java.awt.event类itemevent的类成员方法: selected定义及介绍
  • JDBC里select sum和select返回的字段类型不一样
  • java命名空间javax.swing类defaultbuttonmodel的类成员方法: selected定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3