你可以将呼叫交错到SSL_Read()& SSL_Write()当其中一个返回SSL_ERROR_WANT_READ或SSL_ERROR_WANT_WRITE时?

时间:2016-02-01 19:42:26

标签: ssl openssl nonblocking

我有一个客户端程序,它使用基于消息的协议与服务器通信。每个请求都有一个或多个响应匹配。

多个请求可以同时在套接字上排队,I / O使用非阻塞I / O在单独的线程上完成。该算法基本上是等待套接字使用select()变得可读和/或可写(基于是否有发送和/或响应读取的请求),然后进行读取和/或写入。这很好。

现在,如果我在套接字上启用SSL,我们必须使用SSL_Read()/ SSL_Write()而不是send()/ recv()。现在,我的问题是,我可以在SSL_Read()失败后使用WANT_READ / WANT_WRITE(反之亦然)调用SSL_Write(),还是必须继续调用SSL_Write()直到成功/失败?文档似乎没有明确地排除这一点,但这里有点模糊。

1 个答案:

答案 0 :(得分:-1)

  在使用WANT_READ / WANT_WRITE(反之亦然)SSL_Read()失败后,我可以调用SSL_Write()吗

如果WANT_WRITE失败,您必须致电SSL_write().否'我可以'。使用WANT_READ读取时不应该失败,因为 读取,除非我猜想是非阻塞模式。

  

或者我必须继续调用SSL_Write()直到成功/失败

是的,当它想要写一个你必须写的时候,你必须重复直到成功。没有'或'关于它。

我真的不明白你为什么要问。问题中是否存在拼写错误?