использование boost asio для записи в карбон дает сломанную трубу

У меня есть Grafana и Graphite, работающие на localhost. Все настроено по умолчанию, поэтому незашифрованный протокол настроен для порта 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

Может кто-нибудь сказать мне, что я делаю не так?

0

Решение

Форма конструктора socket(io_service, endpoint) привязывает локальную конечную точку сокета к данной конечной точке.

Я думаю, что вы хотите сделать, это:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]