summaryrefslogtreecommitdiff
path: root/sbin
diff options
context:
space:
mode:
authorTheo de Raadt <deraadt@cvs.openbsd.org>1996-12-10 08:37:07 +0000
committerTheo de Raadt <deraadt@cvs.openbsd.org>1996-12-10 08:37:07 +0000
commit2f7a7ba17bb99870e3bac5e6c2fa656017224ee3 (patch)
treedba39b2944066feeffceace11886b7d5755fa55d /sbin
parent6a6c37ce5f9d7a4a7ed531e4f40457b65da4809e (diff)
crank SO_SNDBUF if needed, kml@nas.nasa.gov
Diffstat (limited to 'sbin')
-rw-r--r--sbin/ping/ping.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/sbin/ping/ping.c b/sbin/ping/ping.c
index ea4f4850731..4763c237bd6 100644
--- a/sbin/ping/ping.c
+++ b/sbin/ping/ping.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ping.c,v 1.8 1996/07/23 10:36:41 deraadt Exp $ */
+/* $OpenBSD: ping.c,v 1.9 1996/12/10 08:37:06 deraadt Exp $ */
/* $NetBSD: ping.c,v 1.20 1995/08/11 22:37:58 cgd Exp $ */
/*
@@ -47,7 +47,7 @@ static char copyright[] =
#if 0
static char sccsid[] = "@(#)ping.c 8.1 (Berkeley) 6/5/93";
#else
-static char rcsid[] = "$OpenBSD: ping.c,v 1.8 1996/07/23 10:36:41 deraadt Exp $";
+static char rcsid[] = "$OpenBSD: ping.c,v 1.9 1996/12/10 08:37:06 deraadt Exp $";
#endif
#endif /* not lint */
@@ -183,6 +183,7 @@ main(argc, argv)
struct in_addr saddr;
register int i;
int ch, fdmask, hold = 1, packlen, preload;
+ int maxsize, maxsizelen;
u_char *datap, *packet;
char *target, hnamebuf[MAXHOSTNAMELEN];
u_char ttl = MAXTTL, loop = 1, df = 0;
@@ -412,6 +413,17 @@ main(argc, argv)
sizeof(saddr)) < 0)
err(1, "setsockopt IP_MULTICAST_IF");
+ /*
+ * When trying to send large packets, you must increase the
+ * size of both the send and receive buffers...
+ */
+ maxsizelen = sizeof maxsize;
+ if (getsockopt(s, SOL_SOCKET, SO_SNDBUF, &maxsize, &maxsizelen) < 0)
+ err(1, "getsockopt");
+ if (maxsize < packlen &&
+ setsockopt(s, SOL_SOCKET, SO_SNDBUF, &packlen, sizeof(maxsize)) < 0)
+ err(1, "setsockopt");
+
/*
* When pinging the broadcast address, you can get a lot of answers.
* Doing something so evil is useful if you are trying to stress the