/* This file is part of Ingen. Copyright 2012-2016 David Robillard Ingen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. Ingen is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for details. You should have received a copy of the GNU Affero General Public License along with Ingen. If not, see . */ #include "ingen/SocketWriter.hpp" #include "ingen/URI.hpp" #include "raul/Socket.hpp" #include #include #include #include #include #ifndef MSG_NOSIGNAL # define MSG_NOSIGNAL 0 #endif namespace ingen { SocketWriter::SocketWriter(URIMap& map, URIs& uris, const URI& uri, std::shared_ptr sock) : TurtleWriter(map, uris, uri) , _socket(std::move(sock)) {} void SocketWriter::message(const Message& message) { TurtleWriter::message(message); if (std::get_if(&message)) { // Send a null byte to indicate end of bundle const char end[] = { 0 }; send(_socket->fd(), end, 1, MSG_NOSIGNAL); } } size_t SocketWriter::text_sink(const void* buf, size_t len) { const ssize_t ret = send(_socket->fd(), buf, len, MSG_NOSIGNAL); if (ret < 0) { return 0; } return ret; } } // namespace ingen