On Sunday 24 August 2008 01:46, Denys Vlasenko wrote: > In order to not waste too much of buffer space, I propose using > (datalen | 0x7ff) + 1025 bytes instead of fixed 48k or 96k constant. > > Please try attached patch. > -- > vda
Actually, "standard" ping seems to do it in order to be able to buffer more than one ping response. I bumbed up buffer size to ~8k for normal (short) pings in this updated patch. Please try it with variously-sized packets. -- vda
diff -d -urpN busybox.2/networking/ping.c busybox.3/networking/ping.c --- busybox.2/networking/ping.c 2008-08-06 00:55:59.000000000 +0200 +++ busybox.3/networking/ping.c 2008-08-24 01:59:54.000000000 +0200 @@ -576,8 +576,9 @@ static void ping4(len_and_sockaddr *lsa) /* enable broadcast pings */ setsockopt_broadcast(pingsock); - /* set recv buf for broadcast pings */ - sockopt = 48 * 1024; /* explain why 48k? */ + /* set recv buf (needed if we can get lots of responses: flood ping, + * broadcast ping etc) */ + sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */ setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt)); signal(SIGINT, print_stats_and_exit); @@ -640,8 +641,9 @@ static void ping6(len_and_sockaddr *lsa) /* enable broadcast pings */ setsockopt_broadcast(pingsock); - /* set recv buf for broadcast pings */ - sockopt = 48 * 1024; /* explain why 48k? */ + /* set recv buf (needed if we can get lots of responses: flood ping, + * broadcast ping etc) */ + sockopt = (datalen * 2) + 7 * 1024; /* giving it a bit of extra room */ setsockopt(pingsock, SOL_SOCKET, SO_RCVBUF, &sockopt, sizeof(sockopt)); sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
_______________________________________________ busybox mailing list [email protected] http://busybox.net/cgi-bin/mailman/listinfo/busybox
