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