Add option to only bind to localhost
authorBjoernSch <mail@bjoern-schrader.de>
Tue, 22 Dec 2015 16:36:17 +0000 (17:36 +0100)
committerBjoernSch <mail@bjoern-schrader.de>
Tue, 22 Dec 2015 16:36:17 +0000 (17:36 +0100)
Add option to only bind to localhost

pigpio.c
pigpio.h
pigpiod.c

index 1f4271a577beada98416c82aa28d996949d4754a..4577eca445c17e9260b4bbaf26f9098ed8437bd3 100644 (file)
--- a/pigpio.c
+++ b/pigpio.c
@@ -7496,7 +7496,14 @@ int initInitialise(void)
       if (portStr) port = atoi(portStr); else port = gpioCfg.socketPort;
 
       server.sin_family = AF_INET;
-      server.sin_addr.s_addr = INADDR_ANY;
+      if (gpioCfg.ifFlags & PI_LOCALHOST_SOCK_IF)
+      {
+         server.sin_addr.s_addr = htonl(INADDR_LOOPBACK);
+      }
+      else
+      {
+         server.sin_addr.s_addr = htonl(INADDR_ANY);
+      }
       server.sin_port = htons(port);
 
       if (bind(fdSock,(struct sockaddr *)&server , sizeof(server)) < 0)
@@ -11508,7 +11515,7 @@ int gpioCfgInterfaces(unsigned ifFlags)
 
    CHECK_NOT_INITED;
 
-   if (ifFlags > 3)
+   if (ifFlags > 7)
       SOFT_ERROR(PI_BAD_IF_FLAGS, "bad ifFlags (%X)", ifFlags);
 
    gpioCfg.ifFlags = ifFlags;
index 288e1f4031c3572bbef56b35f1f8353d2828ce7d..c92157da0fd4df21f598c27ac6992357469e7f09 100644 (file)
--- a/pigpio.h
+++ b/pigpio.h
@@ -731,8 +731,9 @@ typedef void *(gpioThreadFunc_t) (void *);
 
 /* ifFlags: */
 
-#define PI_DISABLE_FIFO_IF 1
-#define PI_DISABLE_SOCK_IF 2
+#define PI_DISABLE_FIFO_IF   1
+#define PI_DISABLE_SOCK_IF   2
+#define PI_LOCALHOST_SOCK_IF 4
 
 /* memAllocMode */
 
index 95be3d40cfe81a5f6ff0ff7591283fcf3929ec35..7b9074c30b7f8818b7de8444a20d4a6ffbefa051 100644 (file)
--- a/pigpiod.c
+++ b/pigpiod.c
@@ -93,6 +93,7 @@ void usage()
       "   -e value, secondary DMA channel, 0-6,         default 5\n" \
       "   -f,       disable fifo interface,             default enabled\n" \
       "   -k,       disable socket interface,           default enabled\n" \
+      "   -l,       localhost socket only               default all interfaces\n" \
       "   -p value, socket port, 1024-32000,            default 8888\n" \
       "   -s value, sample rate, 1, 2, 4, 5, 8, or 10,  default 5\n" \
       "   -t value, clock peripheral, 0=PWM 1=PCM,      default PCM\n" \
@@ -120,7 +121,7 @@ static void initOpts(int argc, char *argv[])
    int opt, err, i;
    int64_t mask;
 
-   while ((opt = getopt(argc, argv, "a:b:c:d:e:fkp:s:t:x:")) != -1)
+   while ((opt = getopt(argc, argv, "a:b:c:d:e:fklp:s:t:x:")) != -1)
    {
       switch (opt)
       {
@@ -167,6 +168,10 @@ static void initOpts(int argc, char *argv[])
             ifFlags |= PI_DISABLE_SOCK_IF;
             break; 
 
+         case 'l':
+            ifFlags |= PI_LOCALHOST_SOCK_IF;
+            break; 
+
          case 'p':
             i = getNum(optarg, &err);
             if ((i >= PI_MIN_SOCKET_PORT) && (i <= PI_MAX_SOCKET_PORT))