in_unix now handles SIGTERM.
authorviric@mandarina
Sun, 14 May 2006 16:23:56 +0200
changeset 29 e51d10f5ded4
parent 28 a206baaa3ad5
child 30 eacb6e51eb0a
in_unix now handles SIGTERM.
syslog_in_unix.c
--- a/syslog_in_unix.c	Sun May 14 16:11:32 2006 +0200
+++ b/syslog_in_unix.c	Sun May 14 16:23:56 2006 +0200
@@ -7,10 +7,15 @@
 #include <sys/socket.h>  // Per les macros bool,true,false
 #include <sys/un.h>  // Per les estructures dels unix sockets
 #include <assert.h> // Per assert()
+#include <stdbool.h>
+#include <signal.h> // per SIGTERM i similars
 
 #include "rfc3164.h"
 #include "syslog.h"
 
+
+static bool finish = false;
+
 void show_help(const char * restrict program)
 {
 	printf("Usage: %s <unix_socket>\n", program);
@@ -60,14 +65,22 @@
 
 	socket_unix = listen_unix(socketname);
 
-	result = 0;
-	while ((result = recv(socket_unix, message, MESSAGE_LENGTH, 0)) >=0 )
+	while (finish == false)
 	{
-		process_message(message);
-		/* Debug */
-		if(!strcmp(message,"close"))
-			break;
+		result = recv(socket_unix, message, MESSAGE_LENGTH, 0);
+		if(result >= 0)
+		{
+			process_message(message);
+			/* Debug */
+			if(!strcmp(message,"close"))
+				break;
+		} else if (result == -1)
+		{
+			if (errno != EINTR)
+				break;
+		}
 	}
+
 	result = close(socket_unix);
 	if (result == -1)
 	{
@@ -83,6 +96,11 @@
 
 }
 
+static void term_handler(int parameter)
+{
+	finish=true;
+}
+
 
 int main(int argn, char **argv)
 {
@@ -93,6 +111,7 @@
 	}
 
 	program_ignore_hup();
+	program_handler(SIGTERM, term_handler);
 
 	server_loop(argv[1]);