From 66e86528627019a5225946ded367efdf9ec96cc2 Mon Sep 17 00:00:00 2001 From: gabime Date: Mon, 10 Feb 2020 14:34:00 +0200 Subject: [PATCH] Fix tcp_sink --- include/spdlog/sinks/tcp_sink.h | 35 +++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/include/spdlog/sinks/tcp_sink.h b/include/spdlog/sinks/tcp_sink.h index 5ea3d662..961cc343 100644 --- a/include/spdlog/sinks/tcp_sink.h +++ b/include/spdlog/sinks/tcp_sink.h @@ -1,29 +1,30 @@ // Copyright(c) 2015-present, Gabi Melman & spdlog contributors. // Distributed under the MIT License (http://opensource.org/licenses/MIT) -#include +#pragma once + +#include #include -#include #include #include #include namespace spdlog { - namespace sinks { +namespace sinks { template -class tcp_sink : public spdlog::sinks::base_sink +class tcp_sink : public spdlog::sinks::base_sink { public: - tcp_sink(std::string address,int port) + tcp_sink(std::string address, int port) { if ((sock_ = socket(AF_INET, SOCK_STREAM, 0)) < 0) { SPDLOG_THROW(spdlog::spdlog_ex("Socket creation error", errno)); } serv_addr_.sin_family = AF_INET; - serv_addr_.sin_port = htons(port); - if(inet_pton(AF_INET, address.c_str(), &serv_addr_.sin_addr)<=0) + serv_addr_.sin_port = ::htons(static_cast(port)); + if (inet_pton(AF_INET, address.c_str(), &serv_addr_.sin_addr) <= 0) { SPDLOG_THROW(spdlog::spdlog_ex("Invalid address/ Address not supported", errno)); } @@ -31,25 +32,29 @@ public: { SPDLOG_THROW(spdlog::spdlog_ex("Connection Failed", errno)); } - } + protected: - void sink_it_(const spdlog::details::log_msg& msg) override + void sink_it_(const spdlog::details::log_msg &msg) override { spdlog::memory_buf_t formatted; spdlog::sinks::base_sink::formatter_->format(msg, formatted); - int res = send(sock_ , formatted.data() , formatted.size() , 0 ); - if(res < 0) + auto res = ::send(sock_, formatted.data(), formatted.size(), 0); + if (res < 0) + { SPDLOG_THROW(spdlog::spdlog_ex("Message Send Failed", errno)); + } } - void flush_() override - { - } + void flush_() override {} + private: int sock_; struct sockaddr_in serv_addr_; }; + using tcp_sink_mt = tcp_sink; using tcp_sink_st = tcp_sink; -}} + +} // namespace sinks +} // namespace spdlog