我想在openssl s_client
中启用多线程。基本上,我想运行,当我运行s_client
程序时,在5个不同的线程上进行5次不同的握手。
目前,这就是我的目标。
$ apps/openssl s_client -connect <host>:<port> -multithread
所以,如果需要启用多线程,我会接受名为switch
的{{1}}并在-multithread
中将其设置为true。
现在,this program中的行apps/s_client.c
到1005
处理请求和握手。所以,我创建了一个从1923
到1005
的内部函数,并尝试在不同的线程中运行该函数。
即,
1923
这是函数内部的函数(父函数为int function_handshake()
{
OpenSSL_add_ssl_algorithms();
SSL_load_error_strings();
....
....
apps_shutdown();
OPENSSL_EXIT(ret);
}
)
完成此功能后,我会运行此main
循环来创建某个for
。
number_of_threads
for(current_thread_count=0; current_thread_count < number_of_threads; current_thread_count++)
{
init_locks();
thread_error = pthread_create(&(tid[current_thread_count]), NULL, function_handshake, NULL);
if(thread_error!=0)
{
printf("Can't create thread, [%s]\n", strerror(thread_error));
goto end;
}
printf("----------thread created------------\n\n");
thread_error = pthread_join(tid[current_thread_count], NULL);
if(thread_error!=0)
{
printf("Can't join thread, [%s]\n", strerror(thread_error));
goto end;
}
kill_locks();
}
和init_locks()
函数来自here
当我尝试运行这个程序时,它在一次迭代中工作正常 - 第一次握手成功。但是,我在第二次握手时遇到kill_locks()
和memory errors
。
请让我知道出现了什么问题,或者是否有更好/其他方式在segmentation faults
中进行多线程处理。