2011-04-08 68 views
3

我正在阅读openssl编程tutorialSSL_read()是否需要处理SSL_ERROR_WANT_WRITE?

我不能让一个服务器应用程序在任何一个连接的操作上被阻塞,因此我将使用非阻塞套接字。

因为它似乎,SSL握手发生在ssl_accept和所以SSL_connect,
这可能被阻止,我将有ssl_accept调用之前设置插座非块。

教程doc说我需要在SSL_read上处理SSL_ERROR_WANT_WRITE(当然加上SSL_ERROR_WANT_READ),因为SSL重新注册可能随时发生。
和SSL_write上的SSL_ERROR_WANT_READ出于同样的原因。

从DOC,

我们得到一个WANT_WRITE如果我们试图 到重新握手,我们阻止对重新握手期间 写。

我们需要等待的插座上是 可写,但重新开始读 当它是

我在“再”握手的一部分困惑。
我不打算保存ssl状态并重用它(这称为会话恢复?) 第一次握手后,我将不必处理同一连接的握手。

我不知道我是否仍然需要担心SSL_read上的WANT_WRITE,反之亦然,我不会使用会话恢复。

谢谢

回答

5

重新握手可以通过两侧的连接过程中的任何点被触发。它实际上与会话恢复没有直接关系。

所以是的,如果你想要你的应用程序可靠,你应该准备好处理SSL_WANT_WRITESSL_WANT_READ无论你是否正在阅读或写作。

相关问题