먼저 하나의 큰 문자열로 조합하지 않고 TCP를 통해 여러 문자열을 보내고 싶습니다. ASIO의 분산 수집 I/O 인터페이스가이를 이해할 수 있습니다. 그러나, 구현이 메모리 오류로 계속 실행되기 때문에 나는 뭔가 잘못하고 있어야합니다. 내가 write(sock, buffer("this is a really long string"))
을 수행 할 때ASIO 분산 수집 I/O가 신비한 메모리 오류를 야기 함
#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));
}
그러나, 그것은 잘 작동 : I telnet localhost 11211
때 (컴파일 가능한 및 실행 가능한) 아래의 코드 조각은 왜곡 된 문자열을 반환합니다. 내가 여기서 무엇을 놓치고 있니?
[scatter-gather I/O]에 대한 'buffer'참조 확인 (http://www.boost.org/doc/libs/1_53_0/doc/html/boost_asio/reference/buffer.html#boost_asio.reference) .buffer.buffers_and_scatter_gather_i_o) 사용하는 예제에는 데이터 벡터가 아닌 ASIO 버퍼 벡터가 있습니다. 아마도 당신은 그것을 시도 할 수 있습니까? –
@ JoachimPileborg : 이전에 시도했습니다. 예제가 해당 메소드를 사용하도록 업데이트되었으며 여전히 같은 방식으로 실패합니다. – int3