aboutsummaryrefslogtreecommitdiff
path: root/networking
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2008-08-24 00:02:18 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2008-08-24 00:02:18 +0000
commit577071558802573119ad5e0695dc6263d81a06fb (patch)
treef0d8fea7343fc1d691e9fcd787b1e7d080c7b62d /networking
parent15f2fdb2b9ba0d397babe0922ae28f84e91505f9 (diff)
downloadbusybox-w32-577071558802573119ad5e0695dc6263d81a06fb.tar.gz
busybox-w32-577071558802573119ad5e0695dc6263d81a06fb.tar.bz2
busybox-w32-577071558802573119ad5e0695dc6263d81a06fb.zip
ping: SO_RCVBUF must be bigger than packet size,
otherwise large ping packets might fail to be received.
Diffstat (limited to 'networking')
-rw-r--r--networking/ping.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/networking/ping.c b/networking/ping.c
index 5def8c335..7cccfbfdc 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -576,8 +576,9 @@ static void ping4(len_and_sockaddr *lsa)
576 /* enable broadcast pings */ 576 /* enable broadcast pings */
577 setsockopt_broadcast(pingsock); 577 setsockopt_broadcast(pingsock);
578 578
579 /* set recv buf for broadcast pings */ 579 /* set recv buf (needed if we can get lots of responses: flood ping,
580 sockopt = 48 * 1024; /* explain why 48k? */ 580 * broadcast ping etc) */
581 sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
581 setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt)); 582 setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
582 583
583 signal(SIGINT, print_stats_and_exit); 584 signal(SIGINT, print_stats_and_exit);
@@ -640,8 +641,9 @@ static void ping6(len_and_sockaddr *lsa)
640 /* enable broadcast pings */ 641 /* enable broadcast pings */
641 setsockopt_broadcast(pingsock); 642 setsockopt_broadcast(pingsock);
642 643
643 /* set recv buf for broadcast pings */ 644 /* set recv buf (needed if we can get lots of responses: flood ping,
644 sockopt = 48 * 1024; /* explain why 48k? */ 645 * broadcast ping etc) */
646 sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */
645 setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt)); 647 setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt));
646 648
647 sockopt = offsetof(struct icmp6_hdr, icmp6_cksum); 649 sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);