/* This file is part of Ingen. Copyright 2007-2015 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 #include #include "raul/Socket.hpp" #include "Engine.hpp" namespace Ingen { namespace Server { /** Listens on main sockets and spawns socket servers for new connections. */ class SocketListener { public: SocketListener(Engine& engine) : unix_sock(Raul::Socket::Type::UNIX) , net_sock(Raul::Socket::Type::TCP) , thread(new std::thread(ingen_listen, &engine, &unix_sock, &net_sock)) {} ~SocketListener() { unix_sock.shutdown(); net_sock.shutdown(); thread->join(); unlink(unix_sock.uri().substr(strlen(unix_scheme)).c_str()); } private: static constexpr const char* unix_scheme = "unix://"; static void ingen_listen(Engine* engine, Raul::Socket* unix_sock, Raul::Socket* net_sock); Raul::Socket unix_sock; Raul::Socket net_sock; std::unique_ptr thread; }; } // namespace Server } // namespace Ingen