X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=common-src%2Fdgram.c;h=7f04bec39be7ea269ab50e9a22d02429749d8e74;hb=HEAD;hp=7fbabb0c517339be80df497ff4b9d06a1306c4aa;hpb=e442edb4d5816c4ad107ad9e71164f845eba70ad;p=debian%2Famanda diff --git a/common-src/dgram.c b/common-src/dgram.c index 7fbabb0..7f04bec 100644 --- a/common-src/dgram.c +++ b/common-src/dgram.c @@ -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) {