关于C#:OpenSSL BIO编写部分文件

OpenSSL BIO writing partial file

我正在尝试使用openssl bio执行FTP STOR操作。在大多数情况下,它工作正常,但有时只发送部分数据。因此逻辑如下:

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

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

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

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

编辑:如果在写入数据和退出之间有短暂的延迟(例如睡眠),则可以完美工作。


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