int*_*nt3 5 c++ boost boost-asio
我想通过TCP发送多个字符串,而不是先将它们组合成一个大字符串,而且据我所知,ASIO的分散 - 聚集I/O接口可以做到这一点.但是,我必须做错了,因为我的实现不断遇到内存错误.下面的代码段(可编译和可运行)在我执行时返回乱码字符串telnet localhost 11211:
#include <vector>
#include <string>
#include <boost/asio.hpp>
using namespace std;
using namespace boost::asio;
using namespace boost::asio::ip;
int main() {
io_service service;
tcp::acceptor acceptor(service, tcp::endpoint(tcp::v4(), 11211));
tcp::socket sock(service);
acceptor.accept(sock);
if (!acceptor.is_open()) return 1;
string s = "this is a really long string";
vector<const_buffer> vec;
vec.push_back(buffer(s));
write(sock, buffer(vec));
}
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,它工作正常write(sock, buffer("this is a really long string")).我在这里错过了什么?
最后一行应该是:
write(sock, vec);
Run Code Online (Sandbox Code Playgroud)
否则它不是"分散 - 聚集",因为buffer自由函数总是返回mutable_buffers_1,即单个缓冲区.在您的情况下,buffer调用以下重载:
template <typename PodType, typename Allocator>
inline mutable_buffers_1 buffer(std::vector<PodType, Allocator>& data)
{
return mutable_buffers_1(mutable_buffer(data.size() ? &data[0] : 0, data.size() * sizeof(PodType)));
}
Run Code Online (Sandbox Code Playgroud)
由于您的向量不是"POD向量",因此它被错误地处理.