c - 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 之间有短暂的延迟(例如睡眠),它可以完美运行。
解决方案
我发现了问题。在关闭数据连接和发送 QUIT 之间,我没有等待控制套接字上的响应。这个问题有助于找到答案。
推荐阅读
- java - 哪个传感器负责 Kotlin 中的指南针功能?
- python - 在文件中的某个单词之后附加文本
- sed - 匹配一个子字符串并在同一行替换另一个
- java - How to implement autocomplete in android with data being in cache and synced with firestore(java)
- amazon-web-services - 在 /root_efs 或 ~/user_efs 上安装 AWS EFS 的影响
- java - 将一种格式的String类型的Date转换为另一种Date格式的String类型
- junit5 - 在测试用例中断言 System.out/err
- python - Django - 如果错误,视图函数内部的函数会自动向用户返回响应吗?
- python - 如何检查列中的日期是否是每月的第二个星期一并在 Python 中返回 True/False?
- jboss - NameNotFoundException 与 jboss 到 Wildfly 服务器迁移