aboutsummaryrefslogtreecommitdiff
path: root/toys/pending/traceroute.c
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2019-07-08 16:02:56 -0700
committerRob Landley <rob@landley.net>2019-07-11 22:02:12 -0500
commita57721d14642291696be4ffd5d8bb0915fbe861b (patch)
tree11a18894601df31ce1eb9c46c5d1faaa59e2f9e8 /toys/pending/traceroute.c
parent34f095fcbf0829719f9a130a359ebf2a3e223ca0 (diff)
downloadtoybox-a57721d14642291696be4ffd5d8bb0915fbe861b.tar.gz
bind/connect cleanup.
Rename the existing xbind/xconnect to xbindany/xconnectany, to make room for new xbind/xconnect that are more like 'x' versions of the regular bind and connect. Move explicit bind/connect callers over to xbind/xconnect. Of the affected commands, only netcat is actually used by Android. It was the most recent patch to netcat that made the lack of a more traditional xbind/xconnect apparent.
Diffstat (limited to 'toys/pending/traceroute.c')
-rw-r--r--toys/pending/traceroute.c16
1 files changed, 5 insertions, 11 deletions
diff --git a/toys/pending/traceroute.c b/toys/pending/traceroute.c
index d5ead9e2..1cfdc480 100644
--- a/toys/pending/traceroute.c
+++ b/toys/pending/traceroute.c
@@ -587,8 +587,7 @@ void traceroute_main(void)
if (setsockopt(TT.snd_sock, IPPROTO_IP, IP_MULTICAST_IF,
(struct sockaddr*)&source, sizeof(struct sockaddr_in)))
perror_exit("can't set multicast source interface");
- if (bind(TT.snd_sock,(struct sockaddr*)&source,
- sizeof(struct sockaddr_in)) < 0) perror_exit("bind");
+ xbind(TT.snd_sock,(struct sockaddr*)&source, sizeof(struct sockaddr_in));
}
if(TT.first_ttl > TT.max_ttl)
@@ -607,9 +606,7 @@ void traceroute_main(void)
if(inet_pton(AF_INET6, TT.src_ip, &(source.sin6_addr)) <= 0)
error_exit("bad address: %s", TT.src_ip);
- if (bind(TT.snd_sock,(struct sockaddr*)&source,
- sizeof(struct sockaddr_in6)) < 0)
- error_exit("bind: Cannot assign requested address");
+ xbind(TT.snd_sock,(struct sockaddr*)&source, sizeof(struct sockaddr_in6));
} else {
struct sockaddr_in6 prb;
socklen_t len = sizeof(prb);
@@ -617,16 +614,13 @@ void traceroute_main(void)
if (toys.optflags & FLAG_i) bind_to_interface(p_fd);
((struct sockaddr_in6 *)&dest)->sin6_port = htons(1025);
- if (connect(p_fd, (struct sockaddr *)&dest, sizeof(struct sockaddr_in6)) < 0)
- perror_exit("can't connect to remote host");
+ xconnect(p_fd, (struct sockaddr *)&dest, sizeof(struct sockaddr_in6));
if(getsockname(p_fd, (struct sockaddr *)&prb, &len))
error_exit("probe addr failed");
close(p_fd);
prb.sin6_port = 0;
- if (bind(TT.snd_sock, (struct sockaddr*)&prb,
- sizeof(struct sockaddr_in6))) perror_exit("bind");
- if (bind(TT.recv_sock, (struct sockaddr*)&prb,
- sizeof(struct sockaddr_in6))) perror_exit("bind");
+ xbind(TT.snd_sock, (struct sockaddr*)&prb, sizeof(struct sockaddr_in6));
+ xbind(TT.recv_sock, (struct sockaddr*)&prb, sizeof(struct sockaddr_in6));
}
inet_ntop(AF_INET6, &((struct sockaddr_in6 *)&dest)->sin6_addr,