问Linux下select() 的使用

SkyWalkerJ 2003-09-29 05:25:17
我在一个循环中用select()监视多个SOCKET是否可读,若有可读的就recv下来。

假如某一次在一个SOCKET上有数据到达,select()返回,我用recv()去收数据,但是没有全收完,还剩下一部分(recv里指定的缓冲长度参数小于实际接收到的数据长度),这样当循环回来再次调用select()的时候,实际上刚才那个SOCKET 还是可读的,但这时select能立即返回并指出这个SOCKET为可读吗?也就是说,select是监视各个SOCKET的可读性还是监视它们的状态变化?

这个问题也可以这么问,就是如果把一组SOCKET加进fd_set,并首次调用select的时候,如果其中某个SOCKET上本来就有没读完的数据,那么select会不会立即返回?还是会等到下次收到数据的时候才返回?
...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2003-09-30
  • 打赏
  • 举报
回复
用循环一次收完就行了,不需要返到select。
SkyWalkerJ 2003-09-30
  • 打赏
  • 举报
回复
我可懂了,结贴,谢了!
linaxing 2003-09-30
  • 打赏
  • 举报
回复
收缓冲区低潮限度:缓冲区里的数据长度大于等于这个值时才返回套接口可读,默认情况下该值为1。
lixiaoshui 2003-09-30
  • 打赏
  • 举报
回复
是谢谢 linaxing(牛牛)
lixiaoshui 2003-09-30
  • 打赏
  • 举报
回复
解解 linaxing(牛牛)
lixiaoshui 2003-09-29
  • 打赏
  • 举报
回复
套接口接收缓冲区低潮限度的当前值

这句不懂
growup 2003-09-29
  • 打赏
  • 举报
回复
UNIX网络编程卷1,P129

描述字在什么条件下准备好读:
1. 套接口接收缓冲区中的数据字节数 大于等于 套接口接收缓冲区低潮限度的当前值。
...

说明select()监视可读性,只要有数据可读就会返回。
事实上也是如此。

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧