Added signal passing.
authorviric@llimona
Fri, 14 Sep 2007 21:58:04 +0200
changeset 7 af8d59476914
parent 6 4fe857c0b12a
child 8 af5545cb286e
Added signal passing.
Makefile
main.c
main.h
signals.c
--- a/Makefile	Fri Sep 14 21:25:51 2007 +0200
+++ b/Makefile	Fri Sep 14 21:58:04 2007 +0200
@@ -1,4 +1,9 @@
 CFLAGS=-g
 
-stdinmix: main.o usocket.o error.o
+stdinmix: main.o usocket.o error.o signals.o
 	$(CC) -o $@ $^
+
+main.o: main.c main.h
+usocket.o: usocket.c main.h
+error.o: error.c main.h
+signals.o: signals.c main.h
--- a/main.c	Fri Sep 14 21:25:51 2007 +0200
+++ b/main.c	Fri Sep 14 21:58:04 2007 +0200
@@ -13,7 +13,7 @@
     return b;
 }
 
-void fork_app(int *opipe, char * const command[])
+int fork_app(int *opipe, char * const command[])
 {
     int p_input[2]; /* from mpg321 to us */
     int p_output[2]; /* from us to mpg321 */
@@ -52,6 +52,8 @@
             close(p_input[1]);
             close(p_output[0]);
     }
+
+    return pid;
 }
 
 int forward_app_data(int in, int out)
@@ -147,8 +149,11 @@
 {
     int p[2];
     int lsocket;
+    int child;
 
-    fork_app(p, &argv[1]);
+    child = fork_app(p, &argv[1]);
+
+    install_signal_forwarders(child);
 
     lsocket = serve_socket();
 
--- a/main.h	Fri Sep 14 21:25:51 2007 +0200
+++ b/main.h	Fri Sep 14 21:58:04 2007 +0200
@@ -7,3 +7,6 @@
 void remove_socket(int ls);
 int accept_connection(int ls);
 int connect_socket();
+
+/* signals.c */
+int install_signal_forwarders();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/signals.c	Fri Sep 14 21:58:04 2007 +0200
@@ -0,0 +1,25 @@
+#include <signal.h>
+
+#include "main.h"
+
+static int child;
+
+static void forward_signals_to_child_handler(int val)
+{
+    kill(child, val);
+}
+
+int install_signal_forwarders(int _child)
+{
+  struct sigaction act;
+
+  child = _child;
+
+  act.sa_handler = forward_signals_to_child_handler;
+  /* Reset the mask */
+  memset(&act.sa_mask,0,sizeof(act.sa_mask));
+  act.sa_flags = 0;
+
+  sigaction(SIGTERM, &act, 0);
+  sigaction(SIGINT, &act, 0);
+}