Hello,

I'm re-writing an application with OpenSSL.
Originally, the application uses only plain TCP socket as a TCP client, it
has two threads, receives and submits message asynchronously. Namely, the
timing of sending/receiving messages are independent on each other, and
there is no logical sequence.

How does it possible to do asynchronous read/write with multithread?

The outline of the original code is below;
------ snip ------
sock = socket( ... ) ;
connect( sock ... ) ;
pthread_create( thread_receive ) ;
pthread_create( thread_send ) ;

void *thread_receive( .. ) {
    while ( ! end_of_transaction ) {
        input_from_aux_device() ;
        write( sock ... ) ;
    }
}

void *thread_send( .. ) {
    while ( ! end_of_transaction ) {
        read( sock ... ) ;
        output_to_aux_device() ;
    }
}
------ snip ------

I found an FAQ about multithreading;

> an SSL connection may not concurrently be used by multiple threads

So, at first, I made two simple wrapper functions to replace plain
read/write functions.

------ snip ------
int read_ssl( .. ) {
    pthread_mutex_lock( &rw_lock ) ;
    SSL_read( ... ) ;
    pthread_mutex_unlock( &rw_lock ) ;
}

int write_ssl( .. ) {
    pthread_mutex_lock( rw_lock ) ;
    SSL_write( ... ) ;
    pthread_mutex_unlock( rw_lock ) ;
}
------ snip ------

Of course, it did not work. The mutex was locked during waiting messages at
SSL_read, could not send any messages.

Can you please help me?
Thank you in advance!

--
YAMANEKO / Mao
http://yamamaya.com/
http://wiki.livedoor.jp/yamamaya_com/

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to