Hi All,

I am opening a SSL connection from a client. The underlying socket and
BIO are non-blocking. I am observing that SSL_connect is executing
three times before it completes. While the first and the last call
return almost immediately (less than 1 ms), the intermediate call
takes 11 ms. Is this expected behavior? Why does SSL wait so long to
return? Any help please?

The code:

        /* socket opened, made non blocking and a non-blocking
tcp_connect is completed. */
        ssl = SSL_new(ctx);
        sbio = BIO_new_socket(sock, BIO_NOCLOSE);
        BIO_set_nbio(sbio, 1);
        SSL_set_bio(ssl, sbio, sbio);

        t_epfd = epoll_create(EPOLL_INIT_SIZE);
        epoll_control(t_epfd, EPOLL_CTL_ADD, sock, EPOLLOUT);

        printf("====== Will start connecting\n");

        while (TRUE)
        {
                gettimeofday(&test_tv, NULL);
                r_code = SSL_connect(ssl); dbg_connect_count++;
                printf("%d: SSL connect returned in %f\n", dbg_connect_count,
tvdiff_msec(&test_tv, NULL));
                if (r_code == 1)
                        break;

                switch(SSL_get_error(ssl, r_code))
                {
                        case SSL_ERROR_WANT_WRITE:
                                printf("SSL: want write\n");
                                epoll_control(t_epfd, EPOLL_CTL_MOD, sock, 
EPOLLOUT);
                                break;
                        case SSL_ERROR_WANT_READ:       // In progress, go back 
and wait        
                                printf("SSL: want read\n");
                                epoll_control(t_epfd, EPOLL_CTL_MOD, sock, 
EPOLLIN);
                                break;
                        default:
                                printf("Error\n");
                                exit(0);
                                break;
                }
                epoll_wait(t_epfd, events, MAXEVENTS, -1);      
        }
        printf("====== SSL connected\n");


And the output:
====== Will start connecting
1: SSL connect returned in 0.126000
SSL: want read
2: SSL connect returned in 11.259000
SSL: want read
3: SSL connect returned in 0.063000
====== SSL connected
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

Reply via email to