[原创]一个linux典型的select模型更新方法

jackxiang 2009-10-23 21:51 | |

1.bool update(int _fd, int _timeout, char *buffer){  
2.      
3.    //cout << "update +++++++" << endl;  
4.    fd_set fdClient;  
5.      
6.    FD_ZERO( &fdClient );  
7.    FD_SET( _fd, &fdClient );  
8.      
9.    struct timeval tv;  
10.      
11.    tv.tv_sec = _timeout;  
12.    tv.tv_usec = 0;  
13.      
14.      
15.    if( select( _fd + 1, &fdClient, NULL, NULL, &tv ) == -1 ) {  
16.        return true;  
17.    }  
18.      
19.    if( FD_ISSET( _fd, &fdClient ) ) {  
20.        memset( buffer, 0, sizeof( char ) * GPBUF_SIZE );  
21.          
22.        int c = recv( _fd, buffer, GPBUF_SIZE, 0 );  
23.          
24.        if( c == -1 && errno != EWOULDBLOCK ) {  
25.            if( errno != ECONNRESET )  
26.                //cout << "peer reset the connection" << endl;  
27.                return true;  
28.        }  
29.        if( c == 0 )  
30.            return true;  
31.          
32.    }  
33.    return false;  
34.}  

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/2100/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]