SSL Socket free and shutdown

问题描述:

对于SSL连接,可以通过接受呼叫接收的FD做什么?它可以重复使用吗?SSL Socket free and shutdown

我想知道究竟想知道的是这样的:

一旦我接受的连接,我得到的FD。 我使用SSL_new创建一个SSL句柄(SSL*)。 使用SSL_set_fdFD添加到此句柄。 我使用SSL_accept来做握手。 现在,如果我在SSL*上拨打SSL_shutdownFD会关闭吗? SSL_free呢?

如果上述问题的答案是否定的,那么我可以使用FD与另一个SSL*

要解释,我想究竟是什么,如果我们读取使用手柄SSL*从连接FD一些数据,那么我们免费或关机SSL*,可我们看到使用新SSL*FD剩余的数据?

SSL_shutdown只通过套接字发送一个关闭通知。如果你想重新使用套接字作为普通套接字,你必须确保对方也做了SSL_shutdown。此信息为您提供了SSL_shutdown的返回码:如果它为1,则SSL连接已关闭,如果为0,则应再次调用SSL_shutdown,以便等待来自对等方的关闭通知。请参阅SSL_shutdown文档以获取更多信息。

完成此操作后,您可以继续将套接字用作普通套接字。这是通过FTP(ftps)进行的SSL,例如使用“AUTH TLS”将连接升级到SSL,并使用“CCC”将其再次降级为纯文本。

SSL_free只释放与SSL对象关联的内存,它不会更改套接字上的任何内容,也不会发送/接收任何数据。

+0

请阅读我的最新编辑。对于这种用法,SSL_free是最适合的,还是应该尝试关机? –

+0

就像我说过的:SSL_free只释放内存(实际上,它减少了SSL对象上的引用计数器,并在计数器变为0时释放内存)并且不对套接字本身执行任何操作。如果您想读取套接字上的其余数据,例如将套接字从SSL降级为普通套接字,您必须使用SSL_shutdown向对等方发送关闭通知,以便关闭SSL会话。 –

+0

我想要做的是将套接字传递给其他类,并从相同的连接读取其余的ssl数据。 –