select() 是阻塞调用还是非阻塞调用

Mar*_*ark 0 sockets linux nonblocking blocking

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

Ste*_*ich 5

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

不。在这种情况下,它会等待,直到选定的文件描述符之一准备就绪或达到超时。这种“等待”显然是在阻塞。

这是非阻塞的唯一情况是超时为 0,即tv_sectv_usec给定timeval设置为 0。