SSL_read() 时是否需要处理 SSL_ERROR_WANT_WRITE?

发布于 2024-10-31 03:10:14 字数 717 浏览 6 评论 0原文

我正在阅读 openssl 编程教程

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

看起来,ssl 握手发生在 ssl_accept 和 ssl_connect 处,
这可能会被阻止,我必须在 ssl_accept 调用之前将套接字设置为非阻止。

教程文档说我需要在 SSL_read 上处理 SSL_ERROR_WANT_WRITE(当然还有 SSL_ERROR_WANT_READ),因为 SSL 重新握手可能随时发生。
出于同样的原因,SSL_write 上的 SSL_ERROR_WANT_READ 也是如此。

从文档来看,

如果我们尝试的话,我们会得到一个WANT_WRITE 重新握手,我们阻止 在重新握手期间写入。

我们需要等待套接字 可写但重新启动读取 当它是时

我对“重新”握手感到困惑。
我不打算保存 ssl 状态并重用它(这称为会话恢复?) 第一次握手后,我将不必处理相同连接的握手问题。

我想知道当我不打算使用会话恢复时,我是否仍然需要担心 SSL_read 上的 WANT_WRITE 问题,反之亦然。

谢谢

I'm reading an openssl programming tutorial.

I can't let a server app to be blocked on any operation for a single connection,
hence I'll use non-block sockets.

Since it seems, ssl handshaking takes place at ssl_accept and ssl_connect,
and this could be blocked, I'll have to set socket to non-block before the ssl_accept call.

The tutorial doc says I need to handle SSL_ERROR_WANT_WRITE(plus SSL_ERROR_WANT_READ of course) on SSL_read because SSL rehandshaking could take place anytime.
And SSL_ERROR_WANT_READ on SSL_write for the same reason.

From the doc,

We get a WANT_WRITE if we’re trying
to rehandshake and we block on a
write during that rehandshake.

We need to wait on the socket to be
writeable but reinitiate the read
when it is

I'm confused on the part of "re"handshaking.
I'm not planning to save ssl state and reuse it (this is called session resumption?)
After the first handshaking I won't have to deal with handshaking for the same connection.

I wonder if I still need to worry about WANT_WRITE on SSL_read and vice versa when I am not gonna use session resumption.

Thank you

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

心欲静而疯不止 2024-11-07 03:10:14

重新握手可以由任何一方在连接期间的任何时刻触发。它实际上与会话恢复没有任何直接关系。

因此,是的,如果您希望应用程序可靠,则无论您当前是在读取还是写入,都应该准备好处理 SSL_WANT_WRITESSL_WANT_READ

Rehandshaking can be triggered by either side at any point during the connection. It doesn't really have anything directly to do with session resumption.

So yes, if you want your application to be reliable, you should be prepared to handle both SSL_WANT_WRITE and SSL_WANT_READ no matter whether you are currently reading or writing.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文