Run into an odd issue.

Consider the following program, based on the documentation[0], using
OpenSSL 1.1.1f

==BEGIN==

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

int main(int argc, char** argv)
{
        BIO *abio;
        int res;

        abio = BIO_new_accept("4444");
        res = BIO_do_accept(abio);
        printf("First BIO_do_accept returned : %d\n", res);
        if(res <= 0) {
                printf("Should have errored here!\n");
                ERR_print_errors_fp(stderr);
                return 1;
        }
        if(res != 1) {
                printf("This is an error, just not correctly returned!\n");
                ERR_print_errors_fp(stderr);
        }

        res = BIO_do_accept(abio);
        printf("Second BIO_do_accept returned : %d\n", res);
        if(res <= 0) {
                printf("Now we get an error!\n");
                ERR_print_errors_fp(stderr);
                return 2;
        }

        return 0;
}

==END==

It compiles and runs fine, but if there is another app using the port,
the first call to BIO_do_accept returns odd values that don't match the
docs.

C:\openssl_test>main.exe
First BIO_do_accept returned : 356
This is an error, just not correctly returned!
OPENSSL_Uplink(78C93330,08): no OPENSSL_Applink

C:\openssl_test>main.exe
First BIO_do_accept returned : 356
This is an error, just not correctly returned!
OPENSSL_Uplink(79313330,08): no OPENSSL_Applink

C:\openssl_test>main.exe
First BIO_do_accept returned : 384
This is an error, just not correctly returned!
OPENSSL_Uplink(79313330,08): no OPENSSL_Applink

The docs say BIO_do_accept should return 0 or -1 on error. It seems a
simple fix is just to check the return == 1, but why the odd and
inconsistent return values?

Scott

[0] https://www.openssl.org/docs/man1.1.1/man3/BIO_do_accept.html

Reply via email to