BIO_read始终返回0

时间:2011-06-29 11:25:28

标签: c openssl

我正在学习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 :(得分:0)

自动应答: 唉,愚蠢的问题:/ 错误的应用程序工作有两行

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

这应该是

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

我绝对需要更多的睡眠。