BIO_read всегда возвращает 0 - PullRequest
1 голос
/ 29 июня 2011

Я изучаю библиотеку OpenSSL. Это мой код

#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. Может кто-нибудь сказать мне, что не так с этим кодом?

1 Ответ

0 голосов
/ 01 июля 2011

Автоответчик: Аааа, глупый вопрос: / Виновны в некорректной работе приложения две строки

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

Это должно быть

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

Определенно мне нужно больше спать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...