0

我正在使用 OpenSSL 1.1.1 为以前通过普通 TCP 与服务器通信的用 C 语言编写的客户端添加 TLS 1.3 支持。设置、握手、证书身份验证和与服务器的通信正确进行。

当我尝试关闭文件描述符时,问题就来了。TCP 代码只是简单地调用close(fd). 我添加了SSL_shutdown(ssl)SSL_free(ssl)(其中 ssl 是 SSL 对象)。现在,如果我执行 a close(fd),我会看到 3 个 TCP RST 从客户端发送到服务器。另一方面,如果我做 a shutdown(fd, SHUT_RDWR),这些 RST 不会发生,可能是因为 FD 还在。我不相信这些 RST 是在添加 TLS 支持之前发生的。我知道这shutdown()只会阻止数据发送,实际上并不会破坏 fd。我们想防止 fd 泄漏。我试过打电话shutdown(fd, SHUT_RDWR)然后打电话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)

这样做的正确方法是什么?

4

0 回答 0