summaryrefslogtreecommitdiffstats
path: root/src/server/SocketListener.hpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2015-02-07 05:44:03 +0000
committerDavid Robillard <d@drobilla.net>2015-02-07 05:44:03 +0000
commit79a1f0012b35fde8988f88c5486780922a856e0d (patch)
tree714e06e9e6073ec567e4b4c879650771e39a2993 /src/server/SocketListener.hpp
parent616bf0ec95f525e8b4cb20a8732097c1549014ee (diff)
downloadingen-79a1f0012b35fde8988f88c5486780922a856e0d.tar.gz
ingen-79a1f0012b35fde8988f88c5486780922a856e0d.tar.bz2
ingen-79a1f0012b35fde8988f88c5486780922a856e0d.zip
Add missing files.
git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@5538 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/server/SocketListener.hpp')
-rw-r--r--src/server/SocketListener.hpp57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/server/SocketListener.hpp b/src/server/SocketListener.hpp
new file mode 100644
index 00000000..71c60d01
--- /dev/null
+++ b/src/server/SocketListener.hpp
@@ -0,0 +1,57 @@
+/*
+ This file is part of Ingen.
+ Copyright 2007-2015 David Robillard <http://drobilla.net/>
+
+ 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 <http://www.gnu.org/licenses/>.
+*/
+
+#include <memory>
+#include <thread>
+
+#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<std::thread> thread;
+};
+
+} // namespace Server
+} // namespace Ingen