我有两个线程,mainThread
and recvThread
.
On recvThread
, 我打电话SSL_read(ssl, readBuffer, sizeof(readBuffer))
。这会阻塞线程,直到收到数据。
然后,于mainThread
我被告知需要发送一些数据。所以,我打电话SSL_write(ssl, someData, sizeof(someData))
.
有时,这效果很好。其他时候,这会失败并出现奇怪的内部错误消息。我的猜测是,当 SSL_read 发生在同一台计算机上时,我无法调用 SSL_writessl
语境。这对我来说完全有道理,但我该如何解决它呢?
我做吗recvThread
做类似的事情:
SSL * ssl;
std::string data;
boost::mutex dataMutex;
while (recvThreadShouldBeRunning) {
char readBuffer[100];
auto nRead = SSL_read(ssl, readBuffer, sizeof(readBuffer)); //Non-blocking call to SSL_read.
// Do something with nRead (handle errors, use data)
{
auto dataLock = boost::unique_lock<boost::mutex>(dataMutex);
if (data.length() > 0)
{
SSL_write(ssl, data.c_str(), data.length());
}
}
sleep(50);
}
然后当我需要发送一些东西时...
{
auto dataLock = boost::unique_lock<boost::mutex>(dataMutex);
data = "some data";
}
这似乎会起作用,但我认为这对我的问题来说是一个相当丑陋的解决方案。有没有办法以某种方式SSL_lock()
SSL_wait_on_data()
SSL_unlock()
?或者这是最好的方法吗?
解决此类问题的标准方法是什么?
谢谢你的时间。