使用 boost asio 写入碳会导致管道破裂
using boost asio to write to carbon gives broken pipe
我在本地主机上有 Grafana 和 Graphite 运行。一切都设置为默认设置,因此为端口 2003 配置了明文协议,如 here
所述
根据需要执行以下操作:
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 */);
我在本地主机上有 Grafana 和 Graphite 运行。一切都设置为默认设置,因此为端口 2003 配置了明文协议,如 here
所述根据需要执行以下操作:
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 */);