我正在使用OpenSSL与服务器通信.我可以随时向服务器发送数据,服务器可能会也可能不会发回响应.服务器还可以在没有请求的情况下将数据发送到客户端.
我在使用BIO_new_ssl_connect制作的BIO上使用SSL,然后使用SSL_read和SSL_write.
我的第一种方法是使用阻塞套接字.我会启动一个线程并在循环中调用SSL_read.每个调用都会阻塞,并且仅在读取某些数据时返回.每次调用后,我都可以打包数据并将其发送到某个地方.当我必须编写时,我只是从另一个线程调用SSL_write.
我无法弄清楚在从不同线程的同一连接上执行SSL_read时调用SSL_write是否有效.当我尝试断开连接(SSL_free/BIO_free)时,SSL_read调用崩溃.
来自不同线程的这些调用是否可取?如果没有,是否有更好的方法解决这个问题(这似乎是一个非常普遍的事情)?
非阻塞插座可能会更好吗?
编辑:对不起,我应该补充一点,我已经实现了OpenSSL文档中描述的线程安全锁定.