c语言多线程多个传入参数,关于ssl多线程参数的传递
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
void *sock_read(int *client) //short event,void *arg
{
char buf[1024];
memset(buf,0,1024);
int d=SSL_read(*client,buf,1024);//接收客户端的数据包
perror("SSL_read");
printf("d=%d\n",d);
·····
}
static void sock_accept(int server_socket,short event,void *arg)
{
struct event *ev=arg;
int new_server_socket;
char sslbuff[MAXBUF +1];
SSL_CTX *ctx;
RSA *rsa;
X509 * client_cert;
char *str;
SSL_load_error_strings();//为打印调试信息做准备
SSL_library_init();//ssl初始化
OpenSSL_add_all_algorithms();//载入ssl算法
SSL_load_error_strings();//载入ssl错误信息
//这里不写了,太多字数限制,就是载入ssl算法和加入证书、验证私钥那些,这里应该没错的;
while(1)
{
SSL *ssl;
struct sockaddr_in addr;
socklen_t len=sizeof(addr);
//由于此结构要长期使用,所以rev必须动态分配,否则离开此函数后会自动释放,导致segment fault
struct event *rev=(struct event *)malloc(sizeof(struct event));
new_server_socket=accept(server_socket,(struct sockaddr *)&addr,&len);
ssl=SSL_new(ctx);
SSL_set_fd(ssl,new_server_socket);
// 建立 SSL 连接
if (SSL_accept(ssl)==-1)
{
close(new_server_socket);
break;
}
client_cert = SSL_get_peer_certificate (ssl); //得到证书并打印信息
if (client_cert != NULL)
{
str = X509_NAME_oneline (X509_get_subject_name (client_cert), 0, 0);
if(str==NULL)
{
exit(1);
}
free (str);
str = X509_NAME_oneline (X509_get_issuer_name (client_cert), 0, 0);
if(str==NULL)
{
exit(1);
}
free (str);
X509_free (client_cert);/*如不再需要,需将证书释放 */
}
else
{
printf ("client does not have certificate.\n");
}
pthread_t child_thread;
pthread_mutex_init(&mutex,NULL);//初始化
if((pthread_create(&child_thread,NULL,(void *)sock_read,(void *)&ssl))<0)//* talk_to_client
if(child_thread!=0)
{
pthread_join(child_thread,NULL);
}
//创建一个读事件,当有客户连接时,接收通知。
event_set(rev,new_server_socket,EV_READ,(void*)sock_read,rev);
event_add(rev,NULL);
event_add(ev,NULL);
printf("end sock_accept\n");
free(rev);
// 关闭 SSL 连接
SSL_shutdown(ssl);
SSL_free(ssl);
}
SSL_CTX_free (ctx);
close(new_server_socket);
}
程序中进行的是ssl accept之后参数的传递,但是在最上顶的
int d=SSL_read(*client,buf,1024);//接收客户端的数据包处总是提示:
warning: passing argument 1 of ‘SSL_write’ makes pointer from integer without a cast
类型不匹配,我将int d=SSL_read(*client,buf,1024);改成int d=SSL_read((SSL *)client,buf,1024);会收不到数据,d=-1,但是 perror显示的是succced,
请问,怎么改?谢谢!
我看过关于openssl不能用于多线程的资料,但是我能不能换种方式,将ssl指针换成其他指针来传递,然后将ssl加入到新指针里边,比如这样SSL_set_fd(ssl,new_server_socket);
参数传递的时候传递新的指针,这样还会起到加密的作用吗
我按照跟下面的方法试过了
int readFromSSLSocket(SSL *ssl,char *buf,int bufsize,int length_to_read)
{
int nread;
memset(buf,'\0',bufsize);
nread = SSL_read(ssl,buf,length_to_read);
return nread;
}
或者
void *sock_read(void *client)
int d=SSL_read((SSL *)client,buf,1024);
结果都一样,收不到数据,SSL_read的返回值都是-1
但是我用perror("SSL_read");打出结果,发现状态是Success,这是怎么回事?
c语言多线程多个传入参数,关于ssl多线程参数的传递相关推荐
- 【C 语言】结构体 ( 结构体 数组 作为函数参数 | 数组 在 堆内存创建 )
文章目录 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 二.完整代码示例 一.结构体 数组 作为函数参数 ( 数组 在 堆内存创建 ) 在上一篇博客 [C 语言]结构体 ( 结构体 数 ...
- 【C 语言】C 语言 函数 详解 ( 函数本质 | 顺序点 | 可变参数 | 函数调用 | 函数活动记录 | 函数设计 ) [ C语言核心概念 ]
相关文章链接 : 1.[嵌入式开发]C语言 指针数组 多维数组 2.[嵌入式开发]C语言 命令行参数 函数指针 gdb调试 3.[嵌入式开发]C语言 结构体相关 的 函数 指针 数组 4.[嵌入式开发 ...
- c语言多线程面试题,iOS面试题--网络多线程
一.多线程的底层实现? 1>线程:Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程 2>开发中很少用Mach级的线程,因为Mach级的线程没有提供多 ...
- c 语言 宏 可变 参数,利用C可变参数和宏定义来实现自己的日志系统
在嵌入式应用的开发过程中,日志系统是非常重要的! 特别是在生产环节出现了偶发性的.与当前的执行环境相关的bug的时候, 如果没有日志系统来追踪问题,很难进行问题重现. 因此,实现一个自己的日志系统是很 ...
- c语言 可变参数的宏,可变参数的宏__ VA_ARGS__的用法
回顾 在[ANSIC几种特殊的标准定义]中我们讲述了比较常用的几项: __FILE__:正在编译文件的路径及文件名 __LINE__:正在编译文件的行号 __DATE__:编译时刻的日期字符串 如&q ...
- R语言caret包构建xgboost模型实战:特征工程(连续数据离散化、因子化、无用特征删除)、配置模型参数(随机超参数寻优、10折交叉验证)并训练模型
R语言caret包构建xgboost模型实战:特征工程(连续数据离散化.因子化.无用特征删除).配置模型参数(随机超参数寻优.10折交叉验证)并训练模型 目录
- 利用进化算法+多进程/多线程来优化SVM中的两个参数:C和Gamma
该案例展示了如何利用进化算法+多进程/多线程来优化SVM中的两个参数:C和Gamma. 在执行本案例前,需要确保正确安装sklearn,以保证SVM部分的代码能够正常执行. 本函数需要用到一个外部数据 ...
- python一个函数可以有参数也可以没有参数_python 传入任意多个参数(方法调用可传参或不传参)...
1.可传参数与不传参数,在定义中给参数设置默认值 class HandleYmal: """ 获取测试环境的配置 """ def __ini ...
- ML之SVM:利用SVM算法(超参数组合进行多线程网格搜索+3fCrVa)对20类新闻文本数据集进行分类预测、评估
ML之SVM:利用SVM算法(超参数组合进行多线程网格搜索+3fCrVa)对20类新闻文本数据集进行分类预测.评估 目录 输出结果 设计思路 核心代码 输出结果 Fitting 3 folds for ...
最新文章
- 使用命令接口对KVM虚拟机进行简单的管理
- gridcontrol 验证错误_值得品读的人生感悟句子,生气,是拿别人的错误惩罚自己...
- java 定义多个变量_学了Java才搞懂JMeter测试计划
- Redis在本地安装与启动
- 点云定义、PCL数据类型和点云处理方式
- Android 8(1),腾讯字节爱奇艺网易华为实习面试汇总
- python去除图片复杂背景_去掉图片黑背景输出为透明背景
- Windows jdk下载与安装
- 2021李宏毅作业hw3 --食物分类。对比出来的80准确率。
- python 吉他_Python中用于比较吉他弦的Matplotlib幅值_频谱单位
- 电源管理芯片TMI6201A,助力电池供电系统超长续航更有价值!
- 使用Java在浏览器页面无法导出excel表格
- Sendgrid 发信失败!错误代码421.5.7.1 是什么原因?
- C# 实现xls类型转换为xlsx类型
- 拥挤城市小程序如何玩转会展营销?
- PHP7新特性(常用)
- Makefile文件名称
- 大都会人寿培训第二天
- SAP migo增强
- poco新增对cocos c++项目的支持~
热门文章
- C#实现RSA加密解密
- oracle case when exists()
- 使用 soapUI 测试 REST 服务
- Web API应用架构设计分析(2)
- 内存或磁盘空间不足,Microsoft Office Excel 无法再次打开或保存任何文档。 [问题点数:20分,结帖人wenyang2004]...
- 定时修改列表 服务器版,Unity定时回调(服务端不依赖Update)
- 查看mysql主从配置的状态及修正 slave不启动问题
- Vim杂记:Sublime的配色方案
- 给array添加元素_前囧(06篇)Array 方法详解
- PHP中的des加密类