Forwarded to openssl-users for discussion

Best regards,
        Lutz
--
Lutz Jaenicke           jaeni...@openssl.org
OpenSSL Project         http://www.openssl.org/~jaenicke/
--- Begin Message ---
Dear OpenSSL developers


About the following source,I have 2 questions:


1.In OpenSSL library 0.9.8d, when executing more than 2 threads at the
same time, the following error sometimes appears:
SSL_connect error, ip=192.168.1.xxx,err:error:00000001:lib(0):func(0):reason(1)
why?


2. But in OpenSSL OpenSSL1.0.1c, the error never happened.I want know the 
diference 
between the two version OpenSSL lib,Can you help me?


----------------------------------------------------------------------------------
main()
{
    SSL_library_init();
    SSL_load_error_strings();
    m_ctx = SSL_CTX_new(TLSv1_method());
    SSL_CTX_set_options(m_ctx, SSL_OP_ALL);


    mutex_buf = (MUTEX_TYPE *)malloc(CRYPTO_num_locks( ) * sizeof(MUTEX_TYPE));
    if (!mutex_buf) {
        return 0;
    }


    for (i = 0; i < CRYPTO_num_locks( ); i++) {
        MUTEX_SETUP(mutex_buf[i]);
    }


    CRYPTO_set_id_callback(id_function);
    CRYPTO_set_locking_callback(locking_function);


    CRYPTO_set_dynlock_create_callback(dyn_create_function);
    CRYPTO_set_dynlock_lock_callback(dyn_lock_function);
    CRYPTO_set_dynlock_destroy_callback(dyn_destroy_function);


    for(nIndex = 0; nIndex < nThreadNum; nIndex++)
    {


      nErrorNo = pthread_create(&thread_id[nIndex], NULL, ThreadProcess,
&diskArray[nIndex] );
      ......
  
    }


}


ThreadProcess()
{
    call socket();
    set non-block;
    call connect();
    call select();
    call BIO_new_socket();
    call SSL_new();
    call SSL_set_bio();
    
    while( TRUE != nEndFlag )
    {


        nStatus = SSL_connect(pstSocketInfo->m_ssl);
        if(nStatus <= 0)
        {
            nErrorNo = SSL_get_error(pstSocketInfo->m_ssl, nStatus);
            if((SSL_ERROR_WANT_WRITE == nErrorNo)||(SSL_ERROR_WANT_READ == 
nErrorNo))
            {
                Sleep(1000);
                nTrySSLConTimes++;
                if ( MAX_SSL_CON_TRY_TIMES < nTrySSLConTimes )
                {
                    CleanSocket( pstSocketInfo );
                    return ERR;
                }
                continue;
            }
            else
            {
★★★★★★★★★★★★★★★★★★★★★★★★★★★
                printf("[ID:%04lx]SSL_connect error, ip=%s, err: 
%s\n",id_function(),szIPStr, 
                    ERR_error_string(nErrorNo, NULL));
                CleanSocket( pstSocketInfo );
                return ERR;
★★★★★★★★★★★★★★★★★★★★★★★★★★★
            }            
        }
        else 
        {
            nEndFlag = TRUE;
        }
    }
}




best regards


liuyb


--- End Message ---

Reply via email to