客户端只发了一句话,为什么非阻塞服务器端可以收到n多句一样的话?
这是自己学习用的一段代码 
 在client和server建立TCP/IP的连接以后 
 client端发一句话给server,然后就无限循环的停在那里,代码如下: 
 ---------------      client.c      ------------------- 
       …… 
       char                     sendbuf[]   =    "1234567890123456789 "; 
       …… 
       write(sockfd,   sendbuf,   strlen(sendbuf)); 
       while(1) 
       { 
                sleep(10); 
       } 
 ------------------------------------------------ 
 然后server端读取client发来的这句话,为了让server在套接口没数据的时候停止读往下继续运行,我将套接口设置成非阻塞的,代码如下: 
 ----------------   server.c   ----------------------- 
    #define            MAXLINE               4096 
          …… 
          val   =   fcntl(sockfd,   F_GETFL,   0); 
          if(val    <   0) 
          { 
 	printf( "[error]   get   sockfd   status   failed!\n ");          
          }					 
          m   =   fcntl(sockfd,   F_SETFL,   val   |   O_NONBLOCK); 
          if(m    <   0) 
          { 
                            printf( "[error]   set   sockfd   status   failed!\n ");          
             }	  			                         
             while(recv(sockfd,   buffer,   MAXLINE,   0)) 
             {                
                         printf( "[buffer_len   =   %d]      %s\n ",   strlen(buffer),   buffer); 
             }      
             …… 
 -----------------------------------------------------   
 然后现象就是client把1234567890123456789发给了server,server端却打出了n多句1234567890123456789   
 这是为什么啊,套接口的接收缓冲区在应用程序读完后不会自动清空吗?还是什么别的原因啊?   
------解决方案--------------------由于设置了 O_NONBLOCK 
 while(recv(sockfd, buffer, MAXLINE, 0)) 
 recv 会返回-1,并设置了errno为EAGAIN, 而返回 -1 是不退出循环的。   
 [EAGAIN]           The socket is marked non-blocking, and the receive 
                         operation would block, or a receive timeout had been 
                         set, and the timeout expired before data were 
                         received.