41 lines
1.3 KiB
Diff
41 lines
1.3 KiB
Diff
Fall back to ipv4 if the host has an ipv6 address,
|
|
but doesnt respond to ipv6 right now.
|
|
|
|
---
|
|
subversion/libsvn_ra_svn/client.c | 20 ++++++++++++++++++++
|
|
1 file changed, 20 insertions(+)
|
|
|
|
--- a/subversion/libsvn_ra_svn/client.c
|
|
+++ b/subversion/libsvn_ra_svn/client.c
|
|
@@ -145,10 +145,30 @@ static svn_error_t *make_connection(cons
|
|
return svn_error_wrap_apr(status, _("Can't create socket"));
|
|
|
|
status = apr_socket_connect(*sock, sa);
|
|
+ if (!status)
|
|
+ goto out;
|
|
+ if (sa->family == APR_INET6) {
|
|
+ status = apr_sockaddr_info_get(&sa, hostname, APR_INET, port, 0, pool);
|
|
+ if (status)
|
|
+ return svn_error_createf(status, NULL, _("Unknown hostname '%s'"),
|
|
+ hostname);
|
|
+#ifdef MAX_SECS_TO_LINGER
|
|
+ /* ### old APR interface */
|
|
+ status = apr_socket_create(sock, sa->family, SOCK_STREAM, pool);
|
|
+#else
|
|
+ status = apr_socket_create(sock, sa->family, SOCK_STREAM, APR_PROTO_TCP,
|
|
+ pool);
|
|
+#endif
|
|
+ if (status)
|
|
+ return svn_error_wrap_apr(status, _("Can't create socket"));
|
|
+
|
|
+ status = apr_socket_connect(*sock, sa);
|
|
+ }
|
|
if (status)
|
|
return svn_error_wrap_apr(status, _("Can't connect to host '%s'"),
|
|
hostname);
|
|
|
|
+out:
|
|
return SVN_NO_ERROR;
|
|
}
|
|
|