diff options
author | Elliott Hughes <enh@google.com> | 2019-07-08 16:02:56 -0700 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2019-07-11 22:02:12 -0500 |
commit | a57721d14642291696be4ffd5d8bb0915fbe861b (patch) | |
tree | 11a18894601df31ce1eb9c46c5d1faaa59e2f9e8 /toys/pending/traceroute.c | |
parent | 34f095fcbf0829719f9a130a359ebf2a3e223ca0 (diff) | |
download | toybox-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.c | 16 |
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, |