Как мне написать потокобезопасный код OpenSSL новым способом? - PullRequest
3 голосов
/ 27 апреля 2020

Я учусь писать многопоточный сервер DTLS, используя OpenSSL. Я просматривал документацию, и похоже, что OpenSSL должен работать с несколькими потоками, если я установил CRYPTO_set_id_callback и CRYPTO_set_locking_callback. Я использую OpenSSL 1.1.1 c, и когда я смотрю в crypto.h, я нахожу это:

/*
 * The old locking functions have been removed completely without compatibility
 * macros. This is because the old functions either could not properly report
 * errors, or the returned error values were not clearly documented.
 * Replacing the locking functions with no-ops would cause race condition
 * issues in the affected applications. It is far better for them to fail at
 * compile time.
 * On the other hand, the locking callbacks are no longer used.  Consequently,
 * the callback management functions can be safely replaced with no-op macros.
 */
#  define CRYPTO_num_locks()            (1)
#  define CRYPTO_set_locking_callback(func)
#  define CRYPTO_get_locking_callback()         (NULL)
#  define CRYPTO_set_add_lock_callback(func)
#  define CRYPTO_get_add_lock_callback()        (NULL)

Итак, я вижу, что этот метод устарел. Что я должен сделать вместо этого, чтобы убедиться, что мой код OpenSSL является потокобезопасным?

- После исследования еще раз я нашел следующее: Учебник по использованию OpenSSL с pthreads . Я также нашел https://www.openssl.org/docs/man1.0.2/man3/CRYPTO_THREADID_set_callback.html. Тем не менее, CRYPTO_THREADID_set_callback() тоже не работает! Похоже, я ничего не мог сделать, кроме как скомпилировать OpenSSL с правильными флагами.

...