lintian doesn't like orphan packages with uploaders...
[debian/amanda] / common-src / dgram.c
index 7fbabb0c517339be80df497ff4b9d06a1306c4aa..7f04bec39be7ea269ab50e9a22d02429749d8e74 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Amanda, The Advanced Maryland Automatic Network Disk Archiver
  * Copyright (c) 1991-1999 University of Maryland at College Park
+ * Copyright (c) 2007-2012 Zmanda, Inc.  All Rights Reserved.
  * All Rights Reserved.
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
@@ -61,9 +62,11 @@ dgram_bind(
     sockaddr_union name;
     int save_errno;
     int *portrange;
+    int sndbufsize = MAX_DGRAM;
 
     portrange = getconf_intrange(CNF_RESERVED_UDP_PORT);
     *portp = (in_port_t)0;
+    g_debug("dgram_bind: setting up a socket with family %d", family);
     if((s = socket(family, SOCK_DGRAM, 0)) == -1) {
        save_errno = errno;
        dbprintf(_("dgram_bind: socket() failed: %s\n"),
@@ -79,6 +82,13 @@ dgram_bind(
        return -1;
     }
 
+    /* try setting the buffer size (= maximum allowable UDP packet size) */
+    if (setsockopt(s, SOL_SOCKET, SO_SNDBUF,
+                  (void *) &sndbufsize, sizeof(sndbufsize)) < 0) {
+       dbprintf("dgram_bind: could not set udp send buffer to %d: %s (ignored)\n",
+                sndbufsize, strerror(errno));
+    }
+
     SU_INIT(&name, family);
     SU_SET_INADDR_ANY(&name);
 
@@ -158,6 +168,9 @@ dgram_send_addr(
        s = dgram->socket;
        socket_opened = 0;
     } else {
+       int sndbufsize = MAX_DGRAM;
+
+       g_debug("dgram_send_addr: setting up a socket with family %d", SU_GET_FAMILY(addr));
        if((s = socket(SU_GET_FAMILY(addr), SOCK_DGRAM, 0)) == -1) {
            save_errno = errno;
            dbprintf(_("dgram_send_addr: socket() failed: %s\n"),
@@ -174,6 +187,13 @@ dgram_send_addr(
                      strerror(errno));
        }
 #endif
+
+       /* try setting the buffer size (= maximum allowable UDP packet size) */
+       if (setsockopt(s, SOL_SOCKET, SO_SNDBUF,
+                      (void *) &sndbufsize, sizeof(sndbufsize)) < 0) {
+          dbprintf("dgram_send_addr: could not set udp send buffer to %d: %s (ignored)\n",
+                    sndbufsize, strerror(errno));
+       }
     }
 
     if(s < 0 || s >= (int)FD_SETSIZE) {