]> jspc29.x-matter.uni-frankfurt.de Git - trbnettools.git/commitdiff
signalhandler for SIG_PIPE included, important
authorhadaq <hadaq>
Wed, 27 Oct 2010 11:38:17 +0000 (11:38 +0000)
committerhadaq <hadaq>
Wed, 27 Oct 2010 11:38:17 +0000 (11:38 +0000)
trbnetd/server/trbnetd.c

index 5019e4621d5985f75cffae1205b8e01d070eb1ab..3d7576996728205d6279ccc54d6134bbf8bdb608 100644 (file)
@@ -7,6 +7,7 @@
 #include <netinet/in.h>
 #include <unistd.h>
 #include <libgen.h>
+#include <signal.h>
 
 #include <trbnet.h>
 #include <trberror.h>
@@ -352,6 +353,14 @@ extern void trbnetrpcprog_1(struct svc_req *rqstp, register SVCXPRT * transp);
 
 /* ------ MAIN ---------------------------------------------------------- */
 
+static void sigHandler(int sig)
+{
+  if (sig == SIGPIPE) {
+    return;
+  }
+  fprintf(stderr, "caught signal: %d\n");  
+}
+
 void usage(const char *progName)
 {
   fprintf(stdout, "Usage: %s [-h] [-f]\n", progName);
@@ -389,19 +398,12 @@ int main(int argc, char **argv)
     }
   }
   
-  pmap_unset(TRBNETRPCPROG, TRBNETRPCVERS);
-
-  transp = svcudp_create(RPC_ANYSOCK);
-  if (transp == NULL) {
-    fprintf(stderr, "%s", "cannot create udp service.");
-    exit(EXIT_FAILURE);
-  }
-  if (!svc_register
-      (transp, TRBNETRPCPROG, TRBNETRPCVERS, trbnetrpcprog_1, IPPROTO_UDP)) {
-    fprintf(stderr, "%s",
-            "unable to register (TRBNETRPCPROG, TRBNETRPCVERS, udp).");
-    exit(EXIT_FAILURE);
+  if (signal(SIGPIPE, sigHandler) == SIG_ERR) {
+    fprintf(stderr, "error setting SignalHandler for SIP_PIPE");
+    abort();
   }
+  
+  pmap_unset(TRBNETRPCPROG, TRBNETRPCVERS);
 
   transp = svctcp_create(RPC_ANYSOCK, 0, 0);
   if (transp == NULL) {