问Linux下select() 的使用
我在一个循环中用select()监视多个SOCKET是否可读,若有可读的就recv下来。
假如某一次在一个SOCKET上有数据到达,select()返回,我用recv()去收数据,但是没有全收完,还剩下一部分(recv里指定的缓冲长度参数小于实际接收到的数据长度),这样当循环回来再次调用select()的时候,实际上刚才那个SOCKET 还是可读的,但这时select能立即返回并指出这个SOCKET为可读吗?也就是说,select是监视各个SOCKET的可读性还是监视它们的状态变化?
这个问题也可以这么问,就是如果把一组SOCKET加进fd_set,并首次调用select的时候,如果其中某个SOCKET上本来就有没读完的数据,那么select会不会立即返回?还是会等到下次收到数据的时候才返回?