SSL_Connect always returrns SSL_ERROR_WANT_READ/SSL_ERROR_WANT_WRITE and stuck in infinite loop

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi All,

I am using below code for creating SSL connection over a non-blocking socket:
-----------------------------------------------------
    ssl_error = SSL_connect(ssl_ctxt);
    if (ssl_error <= 0) {
        ssl_error = SSL_get_error(ssl_ctxt, ssl_error);
        switch (ssl_error) {
            case SSL_ERROR_WANT_READ:
            case SSL_ERROR_WANT_WRITE:
                return RETRY;
            default:
                ERR_load_crypto_strings();
                printf("SSL_connect failed  %s:%d",
                           ERR_error_string(ERR_get_error(), NULL), ssl_error);
                ERR_free_strings();
                return FAIL;
        }
    }
------------------------------------------------------------
As per Openssl doc, when above function returns RETRY, I am again polling on my 'fd' with epoll_wait(), and retrying SSL_conn, below is the pseudo code for it.
------------------------------------------
event.events  = EPOLLOUT;
event.data.fd = fd;  
epoll_ctl(epoll_fd, EPOLL_CTL_ADD, fd, &event)
event_count = epoll_wait(epoll_fd, events, MAX_EVENTS, 1000);
if(event_count > 0) {
     //Call SSL_connect again.
}
-----------------------------------------------
Most of the time it's working fine, but sometimes I am observing that connection is not getting established and SSL_connect always returns SSL_ERROR_WANT_READ/SSL_ERROR_WANT_READ, which is resulting into an infinite loop.

Can you please help me if there is something wrong in my code while handling these errors? or How I can gracefully come out of this situation and avoid infinite loop ?

Thanks in advance.

Regards,
Amit

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux