OpenSSL - многопоточная среда - C ++ - PullRequest
0 голосов
/ 24 августа 2018

Я использую неблокирующие сокеты и OpenSSL 1.1.0 для создания простого веб-сервера.

Клиентские запросы обрабатываются в 4 потоках, а потоки создаются с использованием C ++ (std::thread).

Мой вопрос: можем ли мы использовать потоки C ++, чтобы сделать поток OpenSSL безопасным для каждого клиентского запроса?

Я спрашиваю это, потому что я нашел это:

*) OpenSSL теперь использует новый API потоков. Больше не нужно установить блокировку обратных вызовов для использования OpenSSL в многопоточной среде. Там Поддерживаются две модели потоков: pthreads и windows threads . это также возможно настроить OpenSSL во время компиляции для "без потоков". старый API потоков больше не должен использоваться. Функции были заменен макросами совместимости "no-op". [Алессандро Гедини, Мэтт Касвелл]

1 Ответ

0 голосов
/ 24 августа 2018

короче по по умолчанию openssl не является потокобезопасным , но вы можете использовать некоторые механизмы блокировки, такие как mutex (std :: mutex) с блокировками (std :: lock_guard) или атомарные типы данных std :: atomic, есть некоторые обратные вызовы, которые должны быть установлены раньше, но сейчас я не могу вспомнить сейчас, проверьте этот пример механизма блокировки https://github.com/openssl/openssl/blob/OpenSSL_1_0_2-stable/crypto/threads/th-lock.c и прочитайте эту статью, у него есть некоторый пример https://www.openssl.org/blog/blog/2017/02/21/threads/ где вы могли бы принять участие, в зависимости я думаю, что std :: thread использует pthread под капотом, но он может использовать собственный (зависящий от ОС) механизм потоков.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...