--- sthreads.c.orig	2016-02-18 10:38:54.000000000 -0500
+++ sthreads.c	2016-02-18 10:39:53.000000000 -0500
@@ -175,19 +175,32 @@
 }
 
 int create_client(SOCKET ls, SOCKET s, CLI *arg, void *(*cli)(void *)) {
+    sigset_t old_mask, new_mask;
+    
+    sigfillset(&new_mask);
+    sigprocmask(SIG_BLOCK, &new_mask, &old_mask);
     switch(fork()) {
     case -1:    /* error */
+        sigprocmask(SIG_SETMASK, &old_mask, NULL);
         str_free(arg);
         if(s>=0)
             closesocket(s);
         return -1;
     case  0:    /* child */
+        signal(SIGCHLD, SIG_DFL);
+        signal(SIGHUP, SIG_DFL); 
+        signal(SIGUSR1, SIG_DFL);
+        signal(SIGPIPE, SIG_DFL);
+        signal(SIGTERM, SIG_DFL);
+        signal(SIGQUIT, SIG_DFL);
+        signal(SIGINT, SIG_DFL); 
+        sigprocmask(SIG_SETMASK, &old_mask, NULL);
         if(ls>=0)
             closesocket(ls);
-        signal(SIGCHLD, null_handler);
         cli(arg);
         _exit(0);
     default:    /* parent */
+        sigprocmask(SIG_SETMASK, &old_mask, NULL);
         str_free(arg);
         if(s>=0)
             closesocket(s);
