On Tue, Mar 09, 2010, Bin Lu wrote:

> Hi,
> 
> I have the following code snippet:
> 
> bio = BIO_new_connect(host);
> BIO_set_conn_port(bio, port);
> BIO_set_nbio(bio, 1)
> while (true) {
>     status = BIO_do_connect(bio);
>     if (status > 0 || !BIO_should_retry(bio)) {
>         break;
>     }
>     sleep(1);
> }
> 
> BIO_do_connect() always returns -1 the first time and 1 the 2nd time, 
> regardless if the server is reachable or not.
> 
> If I use the blocking mode, then it returns 1 on reachable server and hangs 
> otherwise, which seems expected.
> 
> Is there anything wrong in the above code, why it returns the same value for 
> reachable or non-reachable servers?
> 

A call cannot immediately determine if a server is reachable. It typically has
to wait until it gets a reply from the remote server. 

That's why you get a retry: the TCP stack is waiting for a response. Only when
it gets that response can the connection continue or not as the case may be.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to