当前位置: 技术问答>linux和unix
问Linux下select() 的使用
来源: 互联网 发布时间:2015-04-25
本文导语: 我在一个循环中用select()监视多个SOCKET是否可读,若有可读的就recv下来。 假如某一次在一个SOCKET上有数据到达,select()返回,我用recv()去收数据,但是没有全收完,还剩下一部分(recv里指定的缓冲长度参数小于实际接...
我在一个循环中用select()监视多个SOCKET是否可读,若有可读的就recv下来。
假如某一次在一个SOCKET上有数据到达,select()返回,我用recv()去收数据,但是没有全收完,还剩下一部分(recv里指定的缓冲长度参数小于实际接收到的数据长度),这样当循环回来再次调用select()的时候,实际上刚才那个SOCKET 还是可读的,但这时select能立即返回并指出这个SOCKET为可读吗?也就是说,select是监视各个SOCKET的可读性还是监视它们的状态变化?
这个问题也可以这么问,就是如果把一组SOCKET加进fd_set,并首次调用select的时候,如果其中某个SOCKET上本来就有没读完的数据,那么select会不会立即返回?还是会等到下次收到数据的时候才返回?
假如某一次在一个SOCKET上有数据到达,select()返回,我用recv()去收数据,但是没有全收完,还剩下一部分(recv里指定的缓冲长度参数小于实际接收到的数据长度),这样当循环回来再次调用select()的时候,实际上刚才那个SOCKET 还是可读的,但这时select能立即返回并指出这个SOCKET为可读吗?也就是说,select是监视各个SOCKET的可读性还是监视它们的状态变化?
这个问题也可以这么问,就是如果把一组SOCKET加进fd_set,并首次调用select的时候,如果其中某个SOCKET上本来就有没读完的数据,那么select会不会立即返回?还是会等到下次收到数据的时候才返回?
|
UNIX网络编程卷1,P129
描述字在什么条件下准备好读:
1. 套接口接收缓冲区中的数据字节数 大于等于 套接口接收缓冲区低潮限度的当前值。
...
说明select()监视可读性,只要有数据可读就会返回。
事实上也是如此。
描述字在什么条件下准备好读:
1. 套接口接收缓冲区中的数据字节数 大于等于 套接口接收缓冲区低潮限度的当前值。
...
说明select()监视可读性,只要有数据可读就会返回。
事实上也是如此。
|
收缓冲区低潮限度:缓冲区里的数据长度大于等于这个值时才返回套接口可读,默认情况下该值为1。
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。