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

select返回0的原因大致有哪些

    来源: 互联网  发布时间:2017-02-14

    本文导语:  对文件(非socket)操作时,select返回0,即超时,原因都有哪些呢,多谢! | int select( int nfds, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, const struct timeval* timeout ); 本函数用于确定一个或多个...

对文件(非socket)操作时,select返回0,即超时,原因都有哪些呢,多谢!

|
int select(
int nfds,
fd_set* readfds,
fd_set* writefds,
fd_set* exceptfds,
const struct timeval* timeout
);
本函数用于确定一个或多个套接口的状态,非socket不知怎么用?
select(sock+1,&readfds,0,0,&timeout) 返回0 套接口可读性超时
select(sock+1,0,&writefds,0,&timeout) 返回0 套接口可写性超时
select(sock+1,0,0,&exceptfds,&timeout) 等待带外数据存在性检查超时
select(sock+1,&readfds,&writefds,&exceptfds,&timeout) 返回0 套接口不可用

|
超时返回0,没有为什么.

|
int select(int nfds, fd_set *readfds, fd_set *writefds,
    fd_set *errorfds, struct timeval *timeout);

需要特别注意的是最后一个参数(超时)不是const的。3楼的写法有问题,虽然有的系统不会修改timeout,但是标准里特别提到:

On successful completion, the object pointed to by the timeout argument may be modified. 

所以在每次select之前,timeout 需要重新赋值。
楼主遇到的问题可能就在这里。

|
       On Linux, the function select modifies timeout to reflect the amount of time not slept; most other implementations do not do this.  This causes problems  both
       when  Linux  code which reads timeout is ported to other operating systems, and when code is ported to Linux that reuses a struct timeval for multiple selects
       in a loop without reinitializing it.  Consider timeout to be undefined after select returns.

这个代码的意思是如果是超时返回,那么说明没数据,就再睡2秒的意思,可惜太依赖于实现了,没人保证超时返回timeout还是原值,所以这个代码准确的说是有BUG的,隐患很大。

    
 
 

您可能感兴趣的文章:

  • 为什么这条语句“select * from table1 group by field1,field2 ”在 Access 97下面的SQL编辑器里面 运行不了!!有谁知道什么原因??
  • man select 结果返回 No manual entry for select
  • select+read 读服务器发送过来的数据, 假设服务器调用close后, 客户端的select是否返回这个socket可读?
  • JDBC里select sum和select返回的字段类型不一样
  • 关于select函数返回错误的处理
  • 有关select的返回时间问题
  • 为什么我的select不能返回
  • select没有返回?
  • AIX上用shell处理db2 select的返回值
  • 如何得到一个resultSet的长度,即一条select语句返回了多少符合条件记录
  • AIX 5.3下select超时不返回的问题
  • 用select count(*) from xxx;在SQLPLUS查询返回2,可用rs.getInt(1)返回竟然是0!!!
  • select使用返回值,一个让我困惑的现象.
  • pro*c 里怎么将select 的返回内容赋值给变量
  • select立刻返回0,errno=0,根本没有等到超时的情况,为何
  • socket通信时,select一直返回超时的问题
  • 非阻塞方式socket中, 去读select返回的sockfd是否一定是非0值??如果读到的字节数比期望少有没有什么好的处理模式??
  • 关于unix网络编程select函数总是返回0的问题
  • 请帮忙看一下,为什么Linux下 select 总返回 0,windows下就正常
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selected定义及介绍
  • 究竟怎么样取得的<select name="select_user" size="8" multiple>值
  • java命名空间javax.accessibility类accessiblestate的类成员方法: selectable定义及介绍
  • select <0时调用exit(0),为什么程序没有退出,而是继续执行select了?
  • java命名空间javax.swing.tree类defaulttreeselectionmodel的类成员方法: selection定义及介绍
  • insert into select和select into的使用和区别介绍
  • java命名空间javax.swing.tree类defaulttreecellrenderer的类成员方法: selected定义及介绍
  • sql代码:select database select all table
  • java命名空间java.awt.event类itemevent的类成员方法: selected定义及介绍
  • Oracle中select 1和select *的区别
  • java命名空间javax.swing类defaultbuttonmodel的类成员方法: selected定义及介绍
  • jquery下拉select控件操作方法分享(jquery操作select)
  • java命名空间javax.swing.text.html类html.tag的类成员方法: select定义及介绍
  • INSERT INTO SELECT语句与SELECT INTO FROM语句的一些区别
  • java命名空间javax.swing.text.html类html.attribute的类成员方法: selected定义及介绍
  • select into 和 insert into select 两种表复制语句
  • java命名空间javax.swing.plaf.synth接口synthconstants的类成员方法: selected定义及介绍
  • select into与insert into select 表复制语句学习实例
  • java命名空间javax.sound.midi类shortmessage的类成员方法: song_select定义及介绍
  • SELECT INTO 和 INSERT INTO SELECT 两种表复制语句简单介绍
  • java命名空间javax.swing类jfilechooser的类成员方法: cancel_selection定义及介绍
  • SELECT INTO与INSERT INTO SELECT表复制语句实例分享


  • 站内导航:


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

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

    浙ICP备11055608号-3