From 97162e5b05244df7dee91813544cd2e1566d881c Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Sat, 9 Jun 2018 15:54:35 +0100 Subject: [PATCH] noip.c (unix_socket_status): Return whether anyone's listening. Add a new `LISTEN' flag which says whether anyone's listening on the socket. Maybe the listener has gone away and we can only see the leftover connections. --- noip.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/noip.c b/noip.c index fea6f74..45ed9a5 100644 --- a/noip.c +++ b/noip.c @@ -63,6 +63,7 @@ #define UNUSED 0u /* No sign of anyone using it */ #define STALE 1u /* Socket exists, but is abandoned */ #define USED 16u /* Socket is in active use */ +#define LISTEN 2u /* Socket has an active listener */ enum { DENY, ALLOW }; /* ACL verdicts */ @@ -680,6 +681,7 @@ static int unix_socket_status(struct sockaddr_un *sun, int quickp) FILE *fp = 0; size_t len, n; int rc; + unsigned long f; char buf[256]; /* If we can't find the socket node, then it's definitely not in use. If @@ -710,6 +712,8 @@ static int unix_socket_status(struct sockaddr_un *sun, int quickp) if (n >= len + 2 && buf[n - len - 2] == ' ' && buf[n - 1] == '\n' && memcmp(buf + n - len - 1, sun->sun_path, len) == 0) { rc |= USED; + if (sscanf(buf, "%*s %*x %*x %lx", &f) < 0 || (f&0x00010000)) + rc |= LISTEN; } } if (ferror(fp)) -- 2.11.0