BIO_do_accept Issue
Scott Morgan
blumf at blueyonder.co.uk
Wed Apr 8 10:47:19 UTC 2020
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
More information about the openssl-users
mailing list