diff options
author | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2007-04-12 11:34:39 +0000 |
---|---|---|
committer | Bernhard Reutner-Fischer <rep.dot.nop@gmail.com> | 2007-04-12 11:34:39 +0000 |
commit | b290889f0265e1278e8a868aa82a65bcc9099b0f (patch) | |
tree | 2fc8dcc3b7f525f61817417e32c2827b57e17b8a /networking/ping.c | |
parent | 51742f4bb0c57a4d5063ece9437a2f34a42e52c8 (diff) | |
download | busybox-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.c | 25 |
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... */ |