只是表示socket可写,并不是表示已经写了什么东西

解决方案 »

  1.   

    那我要是发送数据,是不是也在这里发送呢??同样的fdRead也被调用,这是不是表示,可以在该socket上调用recv接收数据啊。。
      

  2.   

    recv操作就像你想的一样,socket可读的时候就读发送操作一般都会在另一个线程中操作的吧,在发送之前可以先判断一下socket可写后再调用send
      

  3.   


    [code=c
    // check write
            for(int i=0; i < fdWrite.fd_count; i++) {
                if( FD_ISSET(<span style="color: #FF0000;">fdWrite.fd_array[i], &g_fdSocketSet)</span> ) {
                    char buf[16] = "abcd";
                    int len = 5;
                     // if( has pending buffer ) {
                              send(fdWrite.fd_array[i], buf, len ,0);
                      }
                     // 检查待发送的消息队列, 若有则发送
                    int a=2;
                    int b=a;
                }
            }][/code]这样就好多了。现在我的想法是:在另外一个线程里面维护一个发送队列缓冲区。在select那个线程里面检查该发送队列,若有则发送