是select阻止或非阻止调用

问题描述

可以公平地说select()在传递带有超时值的struct timeval参数时是非阻塞的吗?并且当该参数为NULL时,它将阻塞。

解决方法

可以公平地说select()在传递带有超时值的struct timeval参数时是非阻塞的吗?

不。在这种情况下,它将一直等待直到所选文件描述符之一准备就绪或达到超时为止。这种“等待”显然受到阻碍。

唯一不发生阻塞的情况是超时为0,即给定tv_sec中的tv_usectimeval被设置为0。