如何解决关闭已调用 SSL_shutdown 的文件描述符后,如何防止 TCP 重置?
我正在使用 OpenSSL 1.1.1 为用 C 编写的客户端添加 TLS 1.3 支持,该客户端以前通过普通 TCP 与服务器通信。设置、握手、证书认证和与服务器的通信正确发生。
当我尝试关闭文件描述符时出现问题。 TCP 代码只是调用 close(fd)
。我添加了 SSL_shutdown(ssl)
和 SSL_free(ssl)
(其中 ssl 是 SSL 对象)。现在,如果我执行 close(fd)
,我会看到 3 个 TCP RST 从客户端发送到服务器。另一方面,如果我执行 shutdown(fd,SHUT_RDWR)
,这些 RST 不会发生,可能是因为 FD 仍然存在。我不相信这些 RST 是在添加 TLS 支持之前发生的。我知道 shutdown()
只会阻止发送数据,实际上并不会破坏 fd。我们想防止 fd 泄漏。我试过调用 shutdown(fd,SHUT_RDWR)
和 then 调用 close(fd)
,但同样的事情发生了。我也试过:
1. shutdown(fd,SHUT_RDWR)
2. int res=read(fd,buffer,4000)
3. // check to make sure res is 0
4. close(fd)
这样做的正确方法是什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。