我有一个客户端程序,它使用基于消息的协议与服务器通信。每个请求都带有1个或多个响应。
多个请求可以立即在套接字上排队,并且I / O使用非阻塞I / O在单独的线程上完成。该算法基本上是使用select()等待套接字变得可读和/或可写(基于是否有发送请求和/或对读取的响应),然后进行读取和/或写入。这很好。
现在,如果在套接字上启用SSL,则必须使用SSL_Read()/ SSL_Write()而不是send()/ recv()。现在,我的问题是,在SSL_Read()失败并出现WANT_READ / WANT_WRITE后,是否可以调用SSL_Write()(反之亦然)?还是必须继续调用SSL_Write(),直到成功/失败?文档似乎并未明确排除这一点,但是在这里有点含糊。
最佳答案
SSL_Read()失败并出现WANT_READ / WANT_WRITE后,我可以调用SSL_Write()吗?反之亦然
如果使用WANT_WRITE失败,则必须致电SSL_write().
否。使用WANT_READ进行的读取不应失败,因为您正在读取,除非我猜是在非阻塞模式下进行。
还是我必须继续调用SSL_Write()直到成功/失败
是的,当它想要写时,您必须写,并且您必须重复直到成功。没有“或”。
我真的不明白你为什么要问。问题中有错别字吗?