summaryrefslogtreecommitdiffstats
path: root/src/server/SocketListener.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2018-01-16 23:54:37 +0100
committerDavid Robillard <d@drobilla.net>2018-01-16 23:54:37 +0100
commit7a69fda894cebbbc3694baa1a10506c00de44f34 (patch)
tree9cbcf93c1dca453d7fe681d7fa36ce97dbc5f5dc /src/server/SocketListener.cpp
parent1c2b3d3e3740c25df4df0a87c3a74506dc49b78c (diff)
downloadingen-7a69fda894cebbbc3694baa1a10506c00de44f34.tar.gz
ingen-7a69fda894cebbbc3694baa1a10506c00de44f34.tar.bz2
ingen-7a69fda894cebbbc3694baa1a10506c00de44f34.zip
Move SocketListener details out of header
Diffstat (limited to 'src/server/SocketListener.cpp')
-rw-r--r--src/server/SocketListener.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/server/SocketListener.cpp b/src/server/SocketListener.cpp
index 82f88ae5..e62b822e 100644
--- a/src/server/SocketListener.cpp
+++ b/src/server/SocketListener.cpp
@@ -39,6 +39,8 @@
namespace Ingen {
namespace Server {
+static constexpr const char* const unix_scheme = "unix://";
+
static std::string
get_link_target(const char* link_path)
{
@@ -59,10 +61,26 @@ get_link_target(const char* link_path)
return std::string();
}
-void
-SocketListener::ingen_listen(Engine* engine,
- Raul::Socket* unix_sock,
- Raul::Socket* net_sock)
+static void ingen_listen(Engine* engine,
+ Raul::Socket* unix_sock,
+ Raul::Socket* net_sock);
+
+
+SocketListener::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::~SocketListener() {
+ unix_sock.shutdown();
+ net_sock.shutdown();
+ thread->join();
+ unlink(unix_sock.uri().substr(strlen(unix_scheme)).c_str());
+}
+
+static void
+ingen_listen(Engine* engine, Raul::Socket* unix_sock, Raul::Socket* net_sock)
{
Ingen::World* world = engine->world();