in_unix now handles SIGTERM.
--- 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]);