On Thu November 17 2011, Arjun SM wrote:
> Hi,
>     Thanks for the reply.
> I have called the ssl_connect() function again after checking for
> SSL_ERROR_WANT_READ
> and SSL_ERROR_WANT_WRITE. But I wanted to know if I can optimize my code.
> Below is my code
> 
> int counter = 6;
>         while (status < 0 && --counter >0 )
>         {
>             if(status < 0)
>             {
>                 error=SSL_get_error(ssl,status);
>                 if(error == SSL_ERROR_WANT_READ || error ==
> SSL_ERROR_WANT_WRITE)
>                 {
>                     MessageLog.Write("****SSL 1st Connect error ", error);
>

But these two cases are __not__ errors,
you just need to 'read' or 'write' as indicated so the protocol can advance.

Mike
>                     usleep(2000000);
>                     status = SSL_connect(ssl);
>                     error=SSL_get_error(ssl,status);
>                     MessageLog.Write("****SSL 2nd Connect error ", error);
>                 }
>                 else
>                 {
>                     break;
>                 }
>             }
>         } // end of while
> 
> I would try for some time and break out saying unable to connect. I am sure
> I can optimize this code by using select() but I am unable to make it work.
> If there is a better approach please do share.
> 
> ~Arjun
> 
> On Tue, Nov 15, 2011 at 9:04 PM, Huaqing Wang <whuaq...@gmail.com> wrote:
> 
> > Hi, Arjun,
> >
> > For non-blocking case, you have to handle SSL_ERROR_WANT_READ  and
> > SSL_ERROR_WANT_WRITE
> > In that case you need to redo *SSL_connect.*
> > *
> > *
> > Huaqing
> >
> > On Tue, Nov 15, 2011 at 5:51 AM, Arjun SM <arjun...@gmail.com> wrote:
> >
> >> Hi all,
> >>    I am newbie to openssl any help is greatly appreciated.
> >>
> >> I have a requirement of fetching the Common name (domin name )  from the
> >> certificate that I request from any HTTPS websites. I followed the regular
> >> method of
> >>
> >> 1. establish a connection with the ip address using *connect() *system
> >> call.
> >> 2. Use *SSL_connect()* system call to perform handshake.
> >> 3. Use *SSL_get_peer_certificate()* to get the certificate.
> >>
> >> The problem I faced was that, the connect() call would at times return a
> >> errno 4 (EINTR) error . So i changed code from blocking to non-blocking
> >> sockets and used select() call to have a valid connection and return an
> >> appropriate file descriptor.
> >> Now the ssl_connect() call returns SSL_ERROR_WANT_READ
> >> or SSL_ERROR_WANT_WRITE error. I am unable to make my code work by adding a
> >> select() even on ssl_connect() call.
> >>
> >> If any one can please help as to how I need to use the  ssl_connect() by
> >> polling that would be of great help. preferred language would be C/C++
> >>
> >> thanks,
> >> ~Arjun
> >>
> >>
> >>
> >>
> >>
> >
> >
> > --
> > Thank you.
> > Best Regards,
> > Michael(Huaqing) Wang
> >
> >
> 


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

Reply via email to