Greetings.
I'm a noob trying to code a simple TCP client (Windows, MinGW, OpenSSL
0.9.8g). Since it has a GUI, I have to go with non-blocking sockets.

I'm supplying a nonexistent host to test a failure but this is what happens:
A first call to connect returns naturally "no connection" and
BIO_should_retry() returns true. But the second time I call connect, even
immediately after the first call, it gives me an OK.

Here's the basic code:
{
    // Create BIO with some random nonexistent host.
    BIO *bio = BIO_new_connect("192.168.9.9:9999");

    if (bio == NULL) {
        // Failed to obtain BIO.
        return false;
    }

    // Set as non-blocking.
    BIO_set_nbio(bio, 1);

    // Attempt to connect.
    printf("BIO_do_connect: %ld\n", BIO_do_connect(bio));
    printf("BIO_should_retry: %d\n", BIO_should_retry(bio));

    // Try again. Not much sense in this, but let's see what happens.
    printf("BIO_do_connect: %ld\n", BIO_do_connect(bio));
    printf("BIO_should_retry: %d\n", BIO_should_retry(bio));
}

Output:
    BIO_do_connect: -1
    BIO_should_retry: 8
    BIO_do_connect: 1
    BIO_should_retry: 8

Does this make sense?
Why does BIO_do_connect() return 1 the second time?

Thanks.

Reply via email to