Я учусь писать многопоточный сервер 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 с правильными флагами.