summaryrefslogtreecommitdiffstats
path: root/contrib/tnftp/src
diff options
context:
space:
mode:
authorgavin <gavin@FreeBSD.org>2012-03-10 11:25:53 +0000
committergavin <gavin@FreeBSD.org>2012-03-10 11:25:53 +0000
commit4a7e20b3aae6d919c9b499d9d4322a2a06dd4632 (patch)
treedd1c8f1b0afa34877d248c60870b817743eb3bbf /contrib/tnftp/src
parent755a81d3cae64ca3da64358f45564eb2f777f2af (diff)
downloadFreeBSD-src-4a7e20b3aae6d919c9b499d9d4322a2a06dd4632.zip
FreeBSD-src-4a7e20b3aae6d919c9b499d9d4322a2a06dd4632.tar.gz
Move determination of socket buffer sizes from startup to the first time a
socket is used. The previous code structure assumed that AF_INET sockets were always available, which is an invalid assumption on IPv6-only systems. This merges the fololowing revisions from NetBSD: src/usr.bin/ftp/main.c 1.120 src/usr.bin/ftp/util.c 1.156 PR: bin/162661 Tested by: bz Obtained from: NetBSD MFC after: 1 week
Diffstat (limited to 'contrib/tnftp/src')
-rw-r--r--contrib/tnftp/src/main.c32
-rw-r--r--contrib/tnftp/src/util.c26
2 files changed, 27 insertions, 31 deletions
diff --git a/contrib/tnftp/src/main.c b/contrib/tnftp/src/main.c
index c2d922b..b987324 100644
--- a/contrib/tnftp/src/main.c
+++ b/contrib/tnftp/src/main.c
@@ -146,9 +146,8 @@ main(int volatile argc, char **volatile argv)
struct passwd *pw;
char *cp, *ep, *anonpass, *upload_path, *src_addr;
const char *anonuser;
- int dumbterm, s, isupload;
+ int dumbterm, isupload;
size_t len;
- socklen_t slen;
tzset();
#if 0 /* tnftp */ /* XXX */
@@ -213,35 +212,6 @@ main(int volatile argc, char **volatile argv)
if (cp != NULL && strlcpy(netrc, cp, sizeof(netrc)) >= sizeof(netrc))
errx(1, "$NETRC `%s': %s", cp, strerror(ENAMETOOLONG));
- /*
- * Get the default socket buffer sizes if we don't already have them.
- * It doesn't matter which socket we do this to, because on the first
- * call no socket buffer sizes will have been modified, so we are
- * guaranteed to get the system defaults.
- */
- s = socket(AF_INET, SOCK_STREAM, 0);
- if (s == -1)
- err(1, "Can't create socket to determine default socket sizes");
- slen = sizeof(rcvbuf_size);
- if (getsockopt(s, SOL_SOCKET, SO_RCVBUF,
- (void *)&rcvbuf_size, &slen) == -1)
- err(1, "Unable to get default rcvbuf size");
- slen = sizeof(sndbuf_size);
- if (getsockopt(s, SOL_SOCKET, SO_SNDBUF,
- (void *)&sndbuf_size, &slen) == -1)
- err(1, "Unable to get default sndbuf size");
- (void)close(s);
- /* sanity check returned buffer sizes */
- if (rcvbuf_size <= 0)
- rcvbuf_size = 8 * 1024;
- if (sndbuf_size <= 0)
- sndbuf_size = 8 * 1024;
-
- if (sndbuf_size > 8 * 1024 * 1024)
- sndbuf_size = 8 * 1024 * 1024;
- if (rcvbuf_size > 8 * 1024 * 1024)
- rcvbuf_size = 8 * 1024 * 1024;
-
marg_sl = ftp_sl_init();
if ((tmpdir = getenv("TMPDIR")) == NULL)
tmpdir = _PATH_TMP;
diff --git a/contrib/tnftp/src/util.c b/contrib/tnftp/src/util.c
index 366b194..bf46f02 100644
--- a/contrib/tnftp/src/util.c
+++ b/contrib/tnftp/src/util.c
@@ -1060,6 +1060,32 @@ strsuftoi(const char *arg)
void
setupsockbufsize(int sock)
{
+ socklen_t slen;
+
+ if (0 == rcvbuf_size) {
+ slen = sizeof(rcvbuf_size);
+ if (getsockopt(sock, SOL_SOCKET, SO_RCVBUF,
+ (void *)&rcvbuf_size, &slen) == -1)
+ err(1, "Unable to determine rcvbuf size");
+ if (rcvbuf_size <= 0)
+ rcvbuf_size = 8 * 1024;
+ if (rcvbuf_size > 8 * 1024 * 1024)
+ rcvbuf_size = 8 * 1024 * 1024;
+ DPRINTF("setupsockbufsize: rcvbuf_size determined as %d\n",
+ rcvbuf_size);
+ }
+ if (0 == sndbuf_size) {
+ slen = sizeof(sndbuf_size);
+ if (getsockopt(sock, SOL_SOCKET, SO_SNDBUF,
+ (void *)&sndbuf_size, &slen) == -1)
+ err(1, "Unable to determine sndbuf size");
+ if (sndbuf_size <= 0)
+ sndbuf_size = 8 * 1024;
+ if (sndbuf_size > 8 * 1024 * 1024)
+ sndbuf_size = 8 * 1024 * 1024;
+ DPRINTF("setupsockbufsize: sndbuf_size determined as %d\n",
+ sndbuf_size);
+ }
if (setsockopt(sock, SOL_SOCKET, SO_SNDBUF,
(void *)&sndbuf_size, sizeof(sndbuf_size)) == -1)
OpenPOWER on IntegriCloud