Пояснение поддержки параллелизма OpenSSL 0.9.8L - могут ли экземпляры SSL использоваться несколькими потоками, если они выполнены не одновременно?

У нас есть многопоточное сетевое приложение, которое использует сокеты в течение 10 лет, и теперь мыпытается защитить приложение с помощью OpenSSL 0.9.8L. На протяжении многих лет приложениеs сетевые протоколы были разработаны для использования дуплексного характера соединения с одним сокетом; приложение одновременно читает и пишет в один и тот же сокет. Приложение управляет самим базовым сокетом и передает дескриптор сокета в OpenSSL через SSL_set_fd.

Мы настроили OpenSSL для поддержки многопоточности, настроив как статические, так и динамические обратные вызовы блокировки, например. CRYPTO_set_id_callback (), CRYPTO_set_locking_callback () и т. Д. По большей части приложение работает хорошо, но мывидим некоторые аномалии. Чтобы помочь нам определить причину, помогут ответы на несколько вопросов.

На странице часто задаваемых вопросов OpenSSL говорится, что OpenSSL является потокобезопасным, но поддерживает это единственное "SSL-соединение не может одновременно использоваться несколькими потоками. "

http://www.openssl.org/support/faq.html#PROG1

Правда или ложь. Вызовы API-интерфейса подключения OpenSSL (SSL_Read, SSL_Write и т. Д.) Могут выполняться одновременно на одном и том же экземпляре SSL (указатель на SSL, возвращаемый вызовом SSL_new)?Правда или ложь. Для блокировки сокетов, где включен SSL_MODE_AUTO_RETRY, поток A может вызывать SSL_Read () для экземпляра SSL X, а поток B одновременно вызывает SSL_Write () для экземпляра SSL X?Правда или ложь. OpenSSL работает без ошибок, когда приложение использует неблокирующие сокеты и предотвращает одновременное выполнение SSL_Read и SSL_Write (а также других вызовов API соединения) на одном и том же экземпляре SSL?Правда или ложь. OpenSSL SSL экземпляр 's, возвращенные SSL_new, привязаны к единственному потоку, который называется SSL_new; связанный означает, что экземпляр SSL нельзя использовать совместно с другими потоками, экземпляр SSL действителен только для использования в потоке, который называется SSL_new?Правда или ложь. Если поток A i) вызывает SSL_new, получение экземпляра SSL X и ii) вызывает SSL_Read с использованием экземпляра SSL X. В конечном итоге произойдет сбой, если поток B не будет одновременно вызывать SSL_Read / SSL_Write с использованием того же экземпляра SSL X?

Ответы на вопрос(2)

Ваш ответ на вопрос