Sockets 用于多客户端套接字编程的函数select()

Sockets 用于多客户端套接字编程的函数select(),sockets,networking,select,io,multiplexing,Sockets,Networking,Select,Io,Multiplexing,我有一个关于套接字编程的I/O多路复用函数select()的简单问题 当select函数执行时,据说它修改了它的fd集, 所以我们每次都需要重新设置它。 (例如,fd_设置读取fds) 但为什么呢 为什么select函数会清除其fd集上不感兴趣的文件描述符 选择功能给(或修改)原始fd集带来了什么变化 谢谢 我从书上或网上其他地方找到的都是这样的 “我们需要”为每个循环例程重置,但它没有说明如何重置 为什么select函数会清除不感兴趣的文件描述符 在它的fd集上 因为在select()返回后,

我有一个关于套接字编程的I/O多路复用函数select()的简单问题

当select函数执行时,据说它修改了它的fd集, 所以我们每次都需要重新设置它。 (例如,fd_设置读取fds)

但为什么呢

为什么select函数会清除其fd集上不感兴趣的文件描述符

选择功能给(或修改)原始fd集带来了什么变化

谢谢

我从书上或网上其他地方找到的都是这样的 “我们需要”为每个循环例程重置,但它没有说明如何重置

为什么select函数会清除不感兴趣的文件描述符 在它的fd集上

因为在select()返回后,您(大概)会想(通过FD_ISSET())查询哪些套接字现在可以读取(或写入)

因此,当select()返回时,它会修改fd_set对象,使其内部仍然设置的唯一位是表示现在已准备好的套接字的位。如果不这样做,FD_ISSET()将无法知道哪些套接字可以使用,哪些没有