Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 使用ssl线程时出错_C_Multithreading_Ssl - Fatal编程技术网

C 使用ssl线程时出错

C 使用ssl线程时出错,c,multithreading,ssl,C,Multithreading,Ssl,我有以下代码(删除了一些不相关的部分) *我不应该使用SSL_free和SSL_CTX_free之间的哪些函数?或者错误来自其他地方?*此代码中似乎没有错误。我尝试了不带ssl的程序,它工作正常,没有出现错误。因此,它必须与ssl部分相关,而且它不会一直出现,只有当我运行3个以上的线程时才会出现。如果没有ssl,我可以运行100而不看到错误(1)上面的代码是否会产生这些错误?i、 e.没有“写入和读取部分”?(2) 这些都是局部变量吗?(3) 您是否在所有线程中调用OpenSSL\u add\u

我有以下代码(删除了一些不相关的部分)


*我不应该使用SSL_free和SSL_CTX_free之间的哪些函数?或者错误来自其他地方?*

此代码中似乎没有错误。我尝试了不带ssl的程序,它工作正常,没有出现错误。因此,它必须与ssl部分相关,而且它不会一直出现,只有当我运行3个以上的线程时才会出现。如果没有ssl,我可以运行100而不看到错误(1)上面的代码是否会产生这些错误?i、 e.没有“写入和读取部分”?(2) 这些都是局部变量吗?(3) 您是否在所有线程中调用
OpenSSL\u add\u ssl\u algorithms()
?这似乎是不对的。(4) 您是否在每个线程中都使用新的SSL CTX?(3)听起来不对,我会改变这一点,只做一次。您还应该在整个过程中使用相同的SSL_CTX,而不是每个连接使用一个新的SSL_CTX。
SSL_METHOD *meth = NULL;
SSL_CTX *ctx = NULL;
SSL *ssl = NULL;
BIO *sbio;
//open socket
int sock = open_port(ip,80);
if(sock == -1)
    return -1;
meth=SSLv23_client_method();
OpenSSL_add_ssl_algorithms();
ctx=SSL_CTX_new(meth);
/* Connect the SSL socket */
ssl=SSL_new(ctx);
sbio=BIO_new_socket(sock,BIO_NOCLOSE);
SSL_set_bio(ssl,sbio,sbio);
if(SSL_connect(ssl)<=0)
{
    SSL_free(ssl);
    SSL_CTX_free(ctx);
    return -1;
}

//ssl write & read part

SSL_shutdown(ssl);
SSL_free(ssl);
SSL_CTX_free(ctx);
//close socket
close(sock);
*** glibc detected *** test: double free or corruption (fasttop): 0xc4813440 ***
*** glibc detected *** test: double free or corruption (!prev): 0x096008b0 ***