SSL Socket free and shutdown
问题描述:
对于SSL
连接,可以通过接受呼叫接收的FD
做什么?它可以重复使用吗?SSL Socket free and shutdown
我想知道究竟想知道的是这样的:
一旦我接受的连接,我得到的FD
。 我使用SSL_new
创建一个SSL句柄(SSL*
)。 使用SSL_set_fd
将FD
添加到此句柄。 我使用SSL_accept
来做握手。 现在,如果我在SSL*
上拨打SSL_shutdown
,FD
会关闭吗? 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对象关联的内存,它不会更改套接字上的任何内容,也不会发送/接收任何数据。
请阅读我的最新编辑。对于这种用法,SSL_free是最适合的,还是应该尝试关机? –
就像我说过的:SSL_free只释放内存(实际上,它减少了SSL对象上的引用计数器,并在计数器变为0时释放内存)并且不对套接字本身执行任何操作。如果您想读取套接字上的其余数据,例如将套接字从SSL降级为普通套接字,您必须使用SSL_shutdown向对等方发送关闭通知,以便关闭SSL会话。 –
我想要做的是将套接字传递给其他类,并从相同的连接读取其余的ssl数据。 –