2011-06-29 6 views
1

J'apprends la bibliothèque OpenSSL. Ce est mon codeBIO_read renvoie toujours 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; 
} 

Le problème est que le BIO_read() retourne toujours 0 valeur. Quelqu'un pourrait-il me dire ce qui ne va pas avec ce code?

+0

Je ne pense pas que _always_ retourne '0'. Lorsque j'ai exécuté votre programme, j'ai obtenu la sortie suivante: 'DATA: \ n \ n @, ¢ ûx == 0'. Au moins une boucle à travers elle est retournée non nulle. (Nouvelles lignes réelles, mais les commentaires ne le laisseront pas passer.) – sarnold

Répondre

0

Autoanswer: Argh, question stupide:/ Coupable de travail incorrect d'application sont deux lignes

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

Cela devrait être

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

Certainement je besoin de plus de sommeil.

Questions connexes