【发布时间】:2023-03-03 04:43:01
【问题描述】:
我使用 OpenSSL API 编写了一个 SSL 客户端来与一个 SSL 服务器交互。在 OpenSSL 站点中,我了解到写入一些数据后需要刷新写入缓冲区。我在我的客户端程序中使用 SSL_Write 和 SSL_Read。正如 OpenSSL 网站建议的那样,我尝试使用 BIO_flush(BIO* ) 刷新数据,我在这里崩溃了。
我正在使用从this site 获得的 SSL 库
这里我不清楚BIO_flush是刷读缓冲区还是刷写缓冲区..:-( 所以我只是想知道是否有其他方法可以刷新 SSL 写入缓冲区...?
这是我的客户端程序的详细信息。
- 使用 SSL_new 创建 SSL 对象 (mSsl)
- 创建 TCP 套接字并与服务器建立连接
- 使用 BIO_new_socket(socket_id,BIO_NOCLOSE) 创建 BIO 对象(mBio)
- 使用 SSL_set_bio(mSsl,mBio,mBio) 将 BIO 对象设置为 SSL 对象;
- 使用 SSL_set_fd(mSsl,socket_id) 将套接字设置为 SSL 对象;
- 使用 SSL_Connect(mSsl) 与服务器建立 SSL 连接;
在上述步骤之后,我启动了两个单独的线程进行写入和读取。写入线程使用 SSL_write 将数据写入服务器,读取线程使用 SSL_Read 从服务器读取数据。
在使用 SSL_Write 写入每个数据包后的写入线程中,我正在调用 BIO_flush(mBio)。
在整个程序中,我只在这个地方直接使用 mBio 对象进行生物缓冲区刷新。
当我开始发送一些数据包时,程序在 BIO_flush 中崩溃......根据转储所说,它在 BIO_ctrl 函数中。我没有得到更多。
有没有人使用过我上面提供的链接并面临同样的问题..?如果是,请告诉我您是否知道解决方案。
是否有任何线程同步规则可以使用 BIO_flush()...?我的意思是对 BIO_flush SSL_Read 的调用不应该像那样同时发生......?
【问题讨论】:
标签: openssl