Hi again,

I'm trying to follow the instructions in the OpenSSL reference book,
and their example code from their site for setting a socket to
'non-blocking'.

Before I made any changes, I was working with good code that was
making secure connections with no problems.

Essentially:
  bio = BIO_new_connect(connect_str);
  BIO_do_connect(bio);
  ssl = SSL_new(ctx);
  SSL_set_bio(ssl, bio, bio);
  SSL_connect(ssl);

>From the example code, it seemed easy enough to call 'SSL_get_rfd()
using the SSL object to get the file descriptor in order to use
fcntl()  to change the socket to non-blocking. However when I did
this, calls to SSL_get_rfd() always return -1. Reading the function
description docs, SSL_get_rfd() will return -1 if the BIO is not
"suitable for file descriptors". The example code doesn't show how
their BIO & SSL objects were created, and there's no other reference
or information on what they mean on how to make them 'suitable'.

So, I tried another approach. I created a socket the convention way
and did a connect, followed by:
  bio = BIO_new_socket(sd, BIO_CLOSE);
  ssl = SSL_new(ctx) ;
  SSL_set_bio(ssl, bio, bio);
  SSL_connect(ssl);
which also worked....until I called SSL_get_rfd() after I created the
SSL object, which again returned -1.

What am I doing wrong? How do you make a BIO object for file
descriptors suitable?

thanx
/carl h.
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to