[Fwd: RE:I am having a hard time getting SSL_Accept to work with a non blocking socket]

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[Fwd: RE:I am having a hard time getting SSL_Accept to work with a non blocking socket]

Gayathri Sundar-2
---------------------------- Original Message ----------------------------
Subject: RE:I am having a hard time getting SSL_Accept to work with a    
non blocking socket From:    "Gayathri Sundar" <[hidden email]>
Date:    Sun, June 5, 2005 11:33 pm
To:      [hidden email]
--------------------------------------------------------------------------

Hi,

while (((rc = SSL_accept(ssl)) <= 0) &&
          ((SSL_get_error(ssl, rc) == SSL_ERROR_WANT_READ) ||
           (SSL_get_error(ssl, rc) == SSL_ERROR_WANT_WRITE)))
       {
          /* as on wait application can do something else */
          do_other_stuff();
        }

hope you have called
SSLBio = BIO_new_socket(ulFd, BIO_NOCLOSE);
* Sets the BIO associated with Socket FD to Non Blocking Mode */
BIO_socket_ioctl(ulFd,FIONBIO,&Switch)
SSL_set_bio(SSLObj,SSLBio,SSLBio)


int ssl_accept()
{
  /* Do the handshake */
  iRetVal = SSL_accept(SSLObj);
  if(iRetVal == 1)
  {
    return 1;
  }
  else
  {
     iRetVal = SSL_get_error(SSLObj, iRetVal);
     switch(iRetVal)
     {
        case SSL_WANT_READ:
        case SSL_WANT_ACCEPT:
          /* This means that the SSL_accept is blocked and should be
            retried when the fd is available for reading. So, add to the
             poll table to look for READ event */
             /* application should poll for READ */
             return(SSL_WANT_READ);
        case SSL_WANT_WRITE:
        case SSL_WANT_CONNECT:
          /* This means that the SSL_accept is blocked and should be
             retried when the fd is available for writing. So, add to the
poll table to look for WRITE event */
             /* application should poll for WRITE */
             return(SSL_WANT_WRITE);
        default:
             /* Abort the accept as its a permanent error */
            return 0;
     }
  }
}


===========================================================================
Hi there, I am pulling my hair out trying to get SSL_accept to work with a
non blocking socket. When I make a call to SSL_accept and then perform an
SSL_get_error. I get the error SSL_ERROR_WANT_READ. At this point what
should I do. Currently I am doing the following:

 while (((rc = SSL_accept(ssl)) <= 0) &&
          ((SSL_get_error(ssl, rc) == SSL_ERROR_WANT_READ) ||
           (SSL_get_error(ssl, rc) == SSL_ERROR_WANT_WRITE)))
       {}

but I never get out of this loop.

I am also using select to obtain read events for this socket. In the case
mentioned above do I need to check select for a read event prior to
calling retrying SSL_accept.


HELP MUCH APPRECIATED!
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [hidden email]
Automated List Manager                           [hidden email]




______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [hidden email]
Automated List Manager                           [hidden email]