我最近在看一个程序,服务器端使用select来监听与客户端的套接字,当客户端有数据来时,程序将数据存入到一个buffer里,然后在下次select循环里,它将buffer里的数据发送到客户端,请问select是如何检测到发送缓冲区有数据的?

解决方案 »

  1.   

    也就是说select在下次循环里测试到了发送端有数据发送,请问select对发送缓冲区的检测的原理是什么呢?
      

  2.   

    这个只是一个IO模型,都是由操作系统处理的,系统接检测到有事件然后通知窗口去响应。
    你可以看看这个
    http://blog.csdn.net/normalnotebook/archive/2006/07/30/999840.aspx
    写的不错。
      

  3.   

    在select循环里检测到客户端数据来,处理完后,将待发数据存放到自己定义的buffer里面,然后下次循环select就判断有数据要写,还是不明白它怎么知道我有数据要发送,我只是把数据放在自己定义的buffer里面,是不是跟keepalive有联系呢?这是别人写的程序,这一点让我很疑惑。难道自己不实现一种通知机制,它自己就知道用户有数据要发送?