diff options
Diffstat (limited to 'libbb/xconnect.c')
-rw-r--r-- | libbb/xconnect.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libbb/xconnect.c b/libbb/xconnect.c index 0e0b247b8..65b1cb8de 100644 --- a/libbb/xconnect.c +++ b/libbb/xconnect.c | |||
@@ -71,6 +71,7 @@ int FAST_FUNC setsockopt_bindtodevice(int fd UNUSED_PARAM, | |||
71 | } | 71 | } |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | #if !ENABLE_PLATFORM_MINGW32 | ||
74 | static len_and_sockaddr* get_lsa(int fd, int (*get_name)(int fd, struct sockaddr *addr, socklen_t *addrlen)) | 75 | static len_and_sockaddr* get_lsa(int fd, int (*get_name)(int fd, struct sockaddr *addr, socklen_t *addrlen)) |
75 | { | 76 | { |
76 | len_and_sockaddr lsa; | 77 | len_and_sockaddr lsa; |
@@ -99,16 +100,17 @@ len_and_sockaddr* FAST_FUNC get_peer_lsa(int fd) | |||
99 | { | 100 | { |
100 | return get_lsa(fd, getpeername); | 101 | return get_lsa(fd, getpeername); |
101 | } | 102 | } |
103 | #endif | ||
102 | 104 | ||
103 | void FAST_FUNC xconnect(int s, const struct sockaddr *s_addr, socklen_t addrlen) | 105 | void FAST_FUNC xconnect(int s, const struct sockaddr *saddr, socklen_t addrlen) |
104 | { | 106 | { |
105 | if (connect(s, s_addr, addrlen) < 0) { | 107 | if (connect(s, saddr, addrlen) < 0) { |
106 | if (ENABLE_FEATURE_CLEAN_UP) | 108 | if (ENABLE_FEATURE_CLEAN_UP) |
107 | close(s); | 109 | close(s); |
108 | if (s_addr->sa_family == AF_INET) | 110 | if (saddr->sa_family == AF_INET) |
109 | bb_perror_msg_and_die("%s (%s)", | 111 | bb_perror_msg_and_die("%s (%s)", |
110 | "can't connect to remote host", | 112 | "can't connect to remote host", |
111 | inet_ntoa(((struct sockaddr_in *)s_addr)->sin_addr)); | 113 | inet_ntoa(((struct sockaddr_in *)saddr)->sin_addr)); |
112 | bb_simple_perror_msg_and_die("can't connect to remote host"); | 114 | bb_simple_perror_msg_and_die("can't connect to remote host"); |
113 | } | 115 | } |
114 | } | 116 | } |
@@ -348,6 +350,10 @@ int FAST_FUNC xsocket_type(len_and_sockaddr **lsap, int family, int sock_type) | |||
348 | #if ENABLE_FEATURE_IPV6 | 350 | #if ENABLE_FEATURE_IPV6 |
349 | fd = socket(AF_INET6, sock_type, 0); | 351 | fd = socket(AF_INET6, sock_type, 0); |
350 | if (fd >= 0) { | 352 | if (fd >= 0) { |
353 | #if ENABLE_PLATFORM_MINGW32 | ||
354 | DWORD buffer = 0; | ||
355 | setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, &buffer, sizeof(DWORD)); | ||
356 | #endif | ||
351 | family = AF_INET6; | 357 | family = AF_INET6; |
352 | goto done; | 358 | goto done; |
353 | } | 359 | } |