diff --git a/Source/Core/Common/CMakeLists.txt b/Source/Core/Common/CMakeLists.txt index f4e0a4ff84..c4f153569d 100644 --- a/Source/Core/Common/CMakeLists.txt +++ b/Source/Core/Common/CMakeLists.txt @@ -131,6 +131,9 @@ endif() if(UNIX) # Posix networking code needs to be fixed for Windows add_executable(traversal_server TraversalServer.cpp) + if(SYSTEMD_FOUND) + target_link_libraries(traversal_server ${SYSTEMD_LIBRARIES}) + endif() if(HAIKU) target_link_libraries(traversal_server network) endif() diff --git a/Source/Core/Common/TraversalServer.cpp b/Source/Core/Common/TraversalServer.cpp index 825eee06a7..5da45a05fe 100644 --- a/Source/Core/Common/TraversalServer.cpp +++ b/Source/Core/Common/TraversalServer.cpp @@ -15,10 +15,16 @@ #include #include #include + +#ifdef HAVE_LIBSYSTEMD +#include +#endif + #include "Common/TraversalProto.h" #define DEBUG 0 #define NUMBER_OF_TRIES 5 +#define PORT 6262 static u64 currentTime; @@ -397,7 +403,7 @@ int main() addr.sin6_len = sizeof(addr); #endif addr.sin6_family = AF_INET6; - addr.sin6_port = htons(6262); + addr.sin6_port = htons(PORT); addr.sin6_flowinfo = 0; addr.sin6_addr = any; addr.sin6_scope_id = 0; @@ -419,6 +425,10 @@ int main() return 1; } +#ifdef HAVE_LIBSYSTEMD + sd_notifyf(0, "READY=1\nSTATUS=Listening on port %d", PORT); +#endif + while (true) { sockaddr_in6 raddr; @@ -450,5 +460,8 @@ int main() HandlePacket(&packet, &raddr); } ResendPackets(); +#ifdef HAVE_LIBSYSTEMD + sd_notify(0, "WATCHDOG=1"); +#endif } }