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之间,我没有等待控制套接字上的响应。该问题有助于找到答案。