让系统调用' select() '阻塞,直到套接字获得要读取的内容

let the system call `select()` block until a socket gets something to read

本文关键字:读取 套接字 select 系统调用 阻塞      更新时间:2023-10-16

select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout)的手册页中,它说:

If timeout is a null pointer, the select blocks indefinitely.

无限表示任意长度的周期吗?

是好让线程阻塞在select(),直到套接字得到一些数据?如果是,*超时应该是多少?

"无限期"不是任意的,它是永远的。如果timeout指针是NULL,那么select将永远阻塞,或者直到其中一个集合中的一个文件描述符"就绪"。

不,等待"永远"不是一个好主意…如果拔掉网线,应用程序就会冻结。您应该设置一个合理的超时(可能是几秒钟),以便在数据从未到达的情况下可以安全退出。