Hello everyone, Good morning/afternoon/evening ! Win32, Windows XP Professional. Openssl0.9.8k compiled with multithreading support.
I am using a blocking BIO to read and write to an SSL socket using two threads (because it is in blocking mode). There is the Reading thread: while (true) BIO_read( m_pBio, pBuffer, i_iLength ); and concurrently, the writing thread that do something like this: BIO_write( m_pBio, i_rStream.operator unsigned char *(), i_rStream.GetLength() ); The SSL_ctx and SSL_session are created from within the Writing thread and to stop the connection, the writing thread do: BIO_reset() and the Reading thread stops by getting an invalid return value from the BIO_read function. This is all very basic, and it is working but I am aware of the "OpenSSL multithreading (or not so) things" and I would like to know if this basic stuff needs some form of synchronization (using THREAD_setup() and THREAD_cleanup()). At the same time if I use some form of synchronization with blocking BIO how can I be free to use BIO_write and send info async if the Reading thread is blocked in BIO_read and holding the mutex ? I guess that SSL wisely will use the functions callbacks to access the internal structures thread-safely, but isn't there any possible way to end up in a deadlock ? Thank you a lot for your answers !!!!! R.