diff -Nur sysklogd-1.4.1-vanilla/sysklogd.8 sysklogd-1.4.1-bind_patch/sysklogd.8
--- sysklogd-1.4.1-vanilla/sysklogd.8   2001-03-11 12:35:51.000000000 -0700
+++ sysklogd-1.4.1-bind_patch/sysklogd.8        2003-10-08 17:42:55.000000000 -0600
@@ -10,6 +10,9 @@
 .RB [ " \-a "
 .I socket
 ]
+.RB [ "\-b "
+.I bind addr
+]
 .RB [ " \-d " ]
 .RB [ " \-f "
 .I config file
@@ -86,6 +89,15 @@
 described by the people from OpenBSD at
 http://www.psionic.com/papers/dns.html.
 .TP
+.BI "\-b " "bind addr"
+When running
+.B syslogd
+with the
+.B -r 
+switch, this argument allows you to specify a single IP address for
+syslogd to bind to.  By default, syslogd will bind to all available
+addresses, which may not be desirable in certain situations.
+.TP
 .B "\-d"
 Turns on debug mode.  Using this the daemon will not proceed a 
 .BR fork (2)
diff -Nur sysklogd-1.4.1-vanilla/syslogd.c sysklogd-1.4.1-bind_patch/syslogd.c
--- sysklogd-1.4.1-vanilla/syslogd.c    2001-03-11 12:40:10.000000000 -0700
+++ sysklogd-1.4.1-bind_patch/syslogd.c 2003-10-08 17:42:55.000000000 -0600
@@ -726,6 +726,7 @@
 int    InetInuse = 0;          /* non-zero if INET sockets are being used */
 int    finet = -1;             /* Internet datagram socket */
 int    LogPort;                /* port number for INET connections */
+char   *BindAddr;              /* IPv4 address we will bind to */
 int    Initialized = 0;        /* set when we have initialized ourselves */
 int    MarkInterval = 20 * 60; /* interval between marks in seconds */
 int    MarkSeq = 0;            /* mark sequence number */
@@ -829,7 +830,7 @@
                funix[i]  = -1;
        }
 
-       while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:v")) != EOF)
+       while ((ch = getopt(argc, argv, "a:b:dhf:l:m:np:rs:v")) != EOF)
                switch((char)ch) {
                case 'a':
                        if (nfunix < MAXFUNIX)
@@ -837,6 +838,9 @@
                        else
                                fprintf(stderr, "Out of descriptors, ignoring %s\n", optarg);
                        break;
+               case 'b':               /* bind to specific IP address, not 0.0.0.0 */
+                       BindAddr = optarg;
+                       break;
                case 'd':               /* debug */
                        Debug = 1;
                        break;
@@ -1175,7 +1179,7 @@
 int usage()
 {
        fprintf(stderr, "usage: syslogd [-drvh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
-               " [-s domainlist] [-f conffile]\n");
+               " [-s domainlist] [-f conffile] [-b bindaddr]\n");
        exit(1);
 }
 
@@ -1216,6 +1220,7 @@
 {
        int fd, on = 1;
        struct sockaddr_in sin;
+       struct in_addr inp;
 
        fd = socket(AF_INET, SOCK_DGRAM, 0);
        if (fd < 0) {
@@ -1224,8 +1229,17 @@
        }
 
        memset(&sin, 0, sizeof(sin));
+       memset(&inp, 0, sizeof(inp));
        sin.sin_family = AF_INET;
        sin.sin_port = LogPort;
+       if (BindAddr) {
+               if (!inet_aton(BindAddr, &inp)) {
+                       logerror("inet_aton(BindAddr), suspending inet");
+                       close(fd);
+                       return -1;
+               }
+       sin.sin_addr.s_addr = inp.s_addr;
+       }
        if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, \
                       (char *) &on, sizeof(on)) < 0 ) {
                logerror("setsockopt(REUSEADDR), suspending inet");