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