我的程序是基于OpenSSL(阻塞模式)开发的,我想把它重构成一个非阻塞模式。它在具有SSL对象的线程中调用SSL_read(),并在具有相同对象的另一个线程中调用SSL_write()。was blocked for SSL_ERROR_WANT_READ
* write_waiton_write_A: SSL_write was blocked for SSL_ERROR_WANT_WRITE* read_waiton_write_A:
我想知道当使用OpenSSL函数(例如SSL_write、SSL_read )时,这是如何工作的。他们的手册里没有任何关于信号的信息。我也试着在谷歌上搜索,但没有运气。您知道OpenSSL是否在内部处理信号,还是需要一些额外的代码?如果是,如何检查函数调用是否被信号中断?看起来OpenSSL不处理重试。它只在BIO对象上设置“应该重试”标志。因此,我需要使用类似的方法来检测呼叫是否被中断,是否需要重试:
int result = SSL_write</
我正在努力将OpenSSL支持添加到我的服务器程序中,一般来说,它运行得很好,但我遇到了一个问题。
首先,一些背景:服务器是单线程的,使用非阻塞I/O和select()循环同时处理多个客户端。问题是:我的客户端可以连接到服务器,发送和接收数据可以正常工作(现在我已经整理好了SSL_ERROR_WANT_WRITE和SSL_ERROR_WANT_READ逻辑)…但是,如果服务器接受()是一个新的客户端连接a function you should not call:/SourceCache/<e