第二需要注意的是select的中间3个参数采用了“value-result”(UNP1的说法)的方式,设置了关心的文件描述符进行select,select返回之后对应描述的fdset中只有有事件发生的对应fd会被设置,其它关心但是没有事件发生的描述符将会从fdset中清除掉,如果不进行重新赋值,下次select就不会关注这些描述符了,因此上述代码中allset每次对rset进行复制。
来看看如果只在while(1) 之前设置rset,在while(1) 中不在每次select之前赋值会发生什么,在控制台输入: strace ./simpleEcho,另外打开一个控制台窗口输入:nc localhost 1314,这作为一个连接Echo server 的 client,然后输入你想发往Echo Server内容。关键我们来看一下Echo server的情况: