2011-06-29 115 views
1

我正在學習OpenSSL庫。 這是我的代碼BIO_read始終返回0

#include <openssl/ssl.h> 
#include <openssl/bio.h> 
#include <openssl/err.h> 
#include <stdio.h> 

void connect_openssl(); 

int main (int argc, char **argv) 
{ 
    CRYPTO_malloc_init(); 
    SSL_library_init(); 
    SSL_load_error_strings(); 
    ERR_load_BIO_strings(); 
    OpenSSL_add_all_algorithms(); 

    connect_openssl(); 

    return 0; 
} 



void connect_openssl() 
{ 
    BIO *bio = BIO_new_connect("google.com:80"); 
    char buffer[1024]; 

    if (bio == NULL) 
    { 
     printf("Error creating BIO! \n"); 
     //ERR_print_errors(stderr); 
     return; 
    } 

    if (BIO_do_connect(bio) <= 0) 
    { 
     printf("Failed to connect! \n"); 
     return; 
    } 

    char buff[1024];; 
    char send[1024]; 

    memset(send, 0, sizeof(send)); 
    strcat(send, "GET/HTTP/1.1\nHost:google.com\nUser Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)\nConnection: Close\n\n"); 

    BIO_puts(bio, send); 

    while (1) 
    { 
     int x = BIO_read(bio, buff, sizeof(buff)-1); 
     if (x == 0) 
     { 
      printf("x==0\n"); 
      break; 
     } 
     else if (x < 0) 
     { 
      if (! BIO_should_retry(bio)) 
      { 
       printf("\nRead failed!\n"); 
       BIO_free_all(bio); 
       return; 
      } 
     } 
     else 
     { 
      buffer[x] = 0; 
      printf("DATA:\n\n"); 
      printf("%s", buffer); 
     } 
    } 

    BIO_free_all(bio); 
    return; 
} 

的問題是BIO_READ()總是返回0值。有人能告訴我這段代碼有什麼問題嗎?

+0

我不認爲它_always_返回'0'。當我運行你的程序時,我得到了以下輸出:'DATA:\ n \ n @,¢ûx== 0'。至少有一個循環通過它返回非零。 (實際換行符,但評論不會讓通過。) – sarnold

回答

0

自動應答: 哎呀,愚蠢的問題:/ 有罪應用不正確的工作是兩行

buffer[x] = 0; 
printf("%s", buffer); 

這應該是

buff[x] = 0; 
printf("%s", buff); 

當然我需要更多的睡眠。