我使用BIO_new_ssl_connect创建了一个SSL连接。然后使用SSL_read和SSL_write进行数据的读取和写入。
我的第一种方法是使用阻塞套接字。我会启动一个线程并在循环中调用SSL_read。每次调用都会阻塞,并且仅在读取到某些数据时返回。每次调用后,我就可以打包数据并将其发送到其他地方。当我需要写入数据时,我只需从另一个线程中调用SSL_write。
但我无法确定在不同的线程中同时对同一连接进行SSL_read和SSL_write是否有效。当我尝试断开连接(SSL_free/BIO_free)时,SSL_read调用会崩溃。
这些来自不同线程的调用是否可取?如果不行,有没有更好的解决方法(这似乎是一个非常常见的问题)?
也许非阻塞套接字会更好吧?
编辑:抱歉,我应该补充说明我已经按照OpenSSL文档中的描述实现了线程安全锁定。
valgrind
来调试它。 - jxh