aboutsummaryrefslogtreecommitdiff
path: root/networking/ping.c
diff options
context:
space:
mode:
authorBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2007-04-12 11:34:39 +0000
committerBernhard Reutner-Fischer <rep.dot.nop@gmail.com>2007-04-12 11:34:39 +0000
commitb290889f0265e1278e8a868aa82a65bcc9099b0f (patch)
tree2fc8dcc3b7f525f61817417e32c2827b57e17b8a /networking/ping.c
parent51742f4bb0c57a4d5063ece9437a2f34a42e52c8 (diff)
downloadbusybox-w32-b290889f0265e1278e8a868aa82a65bcc9099b0f.tar.gz
busybox-w32-b290889f0265e1278e8a868aa82a65bcc9099b0f.tar.bz2
busybox-w32-b290889f0265e1278e8a868aa82a65bcc9099b0f.zip
- add xsendto and use where appropriate; shrink iplink; sanitize libiproute a bit.
-916 byte
Diffstat (limited to 'networking/ping.c')
-rw-r--r--networking/ping.c25
1 files changed, 5 insertions, 20 deletions
diff --git a/networking/ping.c b/networking/ping.c
index bbe2c9f76..e413bec70 100644
--- a/networking/ping.c
+++ b/networking/ping.c
@@ -101,15 +101,9 @@ static void ping4(len_and_sockaddr *lsa)
101 pkt->icmp_type = ICMP_ECHO; 101 pkt->icmp_type = ICMP_ECHO;
102 pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet)); 102 pkt->icmp_cksum = in_cksum((unsigned short *) pkt, sizeof(packet));
103 103
104 c = sendto(pingsock, packet, DEFDATALEN + ICMP_MINLEN, 0, 104 c = xsendto(pingsock, packet, DEFDATALEN + ICMP_MINLEN,
105 (struct sockaddr *) &pingaddr, sizeof(pingaddr)); 105 (struct sockaddr *) &pingaddr, sizeof(pingaddr));
106 106
107 if (c < 0) {
108 if (ENABLE_FEATURE_CLEAN_UP)
109 close(pingsock);
110 bb_perror_msg_and_die("sendto");
111 }
112
113 /* listen for replies */ 107 /* listen for replies */
114 while (1) { 108 while (1) {
115 struct sockaddr_in from; 109 struct sockaddr_in from;
@@ -153,15 +147,9 @@ static void ping6(len_and_sockaddr *lsa)
153 sockopt = offsetof(struct icmp6_hdr, icmp6_cksum); 147 sockopt = offsetof(struct icmp6_hdr, icmp6_cksum);
154 setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt)); 148 setsockopt(pingsock, SOL_RAW, IPV6_CHECKSUM, &sockopt, sizeof(sockopt));
155 149
156 c = sendto(pingsock, packet, DEFDATALEN + sizeof (struct icmp6_hdr), 0, 150 c = xsendto(pingsock, packet, DEFDATALEN + sizeof (struct icmp6_hdr),
157 (struct sockaddr *) &pingaddr, sizeof(pingaddr)); 151 (struct sockaddr *) &pingaddr, sizeof(pingaddr));
158 152
159 if (c < 0) {
160 if (ENABLE_FEATURE_CLEAN_UP)
161 close(pingsock);
162 bb_perror_msg_and_die("sendto");
163 }
164
165 /* listen for replies */ 153 /* listen for replies */
166 while (1) { 154 while (1) {
167 struct sockaddr_in6 from; 155 struct sockaddr_in6 from;
@@ -306,15 +294,12 @@ static void sendping_tail(void (*sp)(int), const void *pkt, int size_pkt)
306 294
307 /* sizeof(pingaddr) can be larger than real sa size, but I think 295 /* sizeof(pingaddr) can be larger than real sa size, but I think
308 * it doesn't matter */ 296 * it doesn't matter */
309 sz = sendto(pingsock, pkt, size_pkt, 0, &pingaddr.sa, sizeof(pingaddr)); 297 sz = xsendto(pingsock, pkt, size_pkt, &pingaddr.sa, sizeof(pingaddr));
310 if (sz < 0)
311 bb_perror_msg_and_die("sendto");
312 if (sz != size_pkt) 298 if (sz != size_pkt)
313 bb_error_msg_and_die("ping wrote %d chars; %d expected", sz, 299 bb_error_msg_and_die(bb_msg_write_error);
314 size_pkt);
315 300
316 signal(SIGALRM, sp); 301 signal(SIGALRM, sp);
317 if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next in 1s */ 302 if (pingcount == 0 || ntransmitted < pingcount) { /* schedule next in 1s */
318 alarm(PINGINTERVAL); 303 alarm(PINGINTERVAL);
319 } else { /* done, wait for the last ping to come back */ 304 } else { /* done, wait for the last ping to come back */
320 /* todo, don't necessarily need to wait so long... */ 305 /* todo, don't necessarily need to wait so long... */