複数の文字列を最初に 1 つの大きな文字列に結合せずに TCP 経由で送信したいのですが、ASIO のスキャッター ギャザー I/O インターフェイスでこれを実行できることを理解しています。ただし、実装でメモリエラーが発生し続けるため、何か間違ったことをしているに違いありません。以下のスニペット (コンパイル可能で実行可能) は、 I の場合に文字化けした文字列を返します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));
}
ただし、実行すると正常に動作しますwrite(sock, buffer("this is a really long string"))
。ここで何が欠けていますか?