Added signal passing.
--- 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);
+}