【发布时间】:2019-11-30 17:36:15
【问题描述】:
我正在尝试使用 boost::asio 和 ajax 创建一个简单的文件上传。不知何故,即使我的缓冲区大小为 500MB,bytes_transferred 也达到了最大值 21845(或类似的值)。对于文本文件 std::cout 会显示一些内容,但对于二进制文件,它会在标题之后立即切断(仍然传输 21845 个字节)。
我尝试使用不同的方法,例如 async_read_some 和 async_read_until,但它没有改变任何东西。还尝试了使用 keep-alive 和更改套接字缓冲区大小的 socket.set_option()。
class tcp_connection
{
public:
void start() {
boost::asio::async_read(socket, boost::asio::buffer(buf), boost::asio::transfer_at_least(1), boost::bind(&tcp_connection::handler, error, bytes_transferred));
}
private:
boost::array<unsigned char, 500000000> buf;
void handler(error, bytes) {
std::cout << buf.data() << std::endl;
boost::asio::async_write(socket, response_buffer, boost::bind(&tcp_connection, handler));
}
}
请查看https://pastebin.com/dPvVGsjU 以获取完整的最小可复制示例
我没有收到错误消息,尽管我忽略了 eof 错误。
【问题讨论】:
标签: javascript html c++ boost-asio