使用Boost Asio写入碳的含量破裂

using boost asio to write to carbon gives broken pipe

本文关键字:Boost Asio 使用      更新时间:2023-10-16

我在localhost上运行grafana和石墨。所有内容都是默认设置为默认的,因此为port 2003配置了宣传协议,如下所述

根据需要进行以下作用:

export SERVER=localhost
export PORT=2003
echo "no_cluster.fake_xen.sample 25 1488542618" | nc  ${SERVER} ${PORT}

给我期望的数据点(根据需要调整时间戳)。

以下最小编译示例:

#include <chrono>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
#include <boost/asio.hpp>
namespace basio = boost::asio;
void post_to_carbon (std::string message)
{
    using btcp = boost::asio::ip::tcp;
    constexpr const char* carbon_port="2003";
    basio::io_service ios;
    btcp::resolver resolver(ios);
    btcp::resolver::query query("localhost", carbon_port);
    btcp::endpoint carbon_endpoint = *resolver.resolve(query);
    btcp::socket sock(ios,carbon_endpoint);
    boost::system::error_code ignored_error;
    basio::write(sock, basio::buffer(message), ignored_error);
    std::cout << "posting: " << message << " gave: " << ignored_error.message() << "n";
}
int main() {
    post_to_carbon("no_cluster.fake_xen.sample 25 1488542800");
}

错误消息失败:

posting: no_cluster.fake_xen.sample 25 1488542800 gave: Broken pipe

有人可以告诉我我做错了什么?

构造函数表格 socket(io_service, endpoint)将套接字的局部端点绑定到给定的端点。

我认为您想做的是:

btcp::socket sock(ios);
sock.connect(carbon_endpoint /* , error_code */);