調用select時,有一處不是很明白,readfds內包含的是有資料可讀取的套接字,那writefds可理解成包含可以發送資料的套接字嗎?這部分套接字是不是會包含所有建立了連接但是沒有資料可讀取的套接字呢(也就是空閑著的socket)?

解决方案 »

  1.   

    需要监测的socket阿,select本来就是检查哪个socket有数据流的
      

  2.   

    一般来说好像是这样的,但是有时候比如TCP的Socket被远端shutdown了,这样的话writefds就不像你说的那有了。
      

  3.   

    writefds是用来检查FD_WRITE消息的,以下情况将会触发该消息
    1.connect成功。
    2.当发送缓冲区由满到不满时。如果你的socket是阻塞的,那么可能永远都不会得到该消息!也就是说select返回之后,writefds总是空的