сегментации У меня есть эта простая программа:OpenSSL
int main()
{
/* INITIALIZING OPENSSL */
SSL_library_init();
SSL_load_error_strings();
ERR_load_BIO_strings();
OpenSSL_add_all_algorithms();
BIO *bio;
connectServerSSL(bio);
login(bio);
}
И это функции:
void connectServerSSL (BIO *bio)
{
SSL_CTX * ctx = SSL_CTX_new(SSLv23_client_method());
SSL * ssl;
if(! SSL_CTX_load_verify_locations(ctx, NULL, "/etc/ssl/certs"))
{
callError(ERR_LOADCERT);
}
bio = BIO_new_ssl_connect(ctx);
BIO_get_ssl(bio, &ssl);
SSL_set_mode(ssl, SSL_MODE_AUTO_RETRY);
BIO_set_conn_hostname(bio, hostnamePort);
if(BIO_do_connect(bio) <= 0)
{
callError(ERR_CONNECTION);
}
if(SSL_get_verify_result(ssl) != X509_V_OK)
{
callError(ERR_VALIDCERT);
}
}
Когда я использую это:
BIO_write (био, request.c_str(), request.size())
В f unction connectServerSSL работает нормально.
Но когда я хочу использовать его в какой-либо другой функции:
void login (BIO *bio)
{
BIO_write(bio, request.c_str(), request.size());
}
я получаю ошибку сегментации (ядро сбрасывали).
Вы не возвращаем '' bio' из connectServerSSL'. – tkausl
Как я могу это сделать? –