首页 > 解决方案 > OpenSSL BIO 写入部分文件

问题描述

我正在尝试使用 openssl bio 来执行 FTP STOR 操作。大多数时候它工作得很好,但有时它只发送部分数据。所以逻辑是这样的:

1. authentication and passive mode selection
2. open data connection
3. write data
4. QUIT

所有操作应同步执行。数据写入函数执行以下操作:

while (written < toWrite && n > 0) {
    n = BIO_write(bio, message.c_str() + written, toWrite - written);
    written += n;
}

在这个循环之后,写了 == toWrite 并且 n > 0,那么就说明写已经成功完成了。但是,该文件被截断。当我在 Wireshark 中查看操作时,我可以注意到 QUIT 操作是在传输第一块数据之后立即发送的。客户端还在 QUIT 命令之后继续发送一些数据块。有谁知道这怎么可能?

编辑:如果在写入数据和 QUIT 之间有短暂的延迟(例如睡眠),它可以完美运行。

标签: copenssl

解决方案


我发现了问题。在关闭数据连接和发送 QUIT 之间,我没有等待控制套接字上的响应。这个问题有助于找到答案。


推荐阅读