revert broken IPv6 workaround

This commit is contained in:
Joe Orton 2019-11-14 10:45:12 +00:00
parent b0a828eb5b
commit 0d5dfe5a4c
2 changed files with 4 additions and 74 deletions

View File

@ -1,73 +0,0 @@
https://bugzilla.redhat.com/show_bug.cgi?id=1130328
https://issues.apache.org/jira/browse/SERF-190
--- serf-1.3.9/outgoing.c.ipv6fail 2015-10-17 13:25:14.000000000 +0100
+++ serf-1.3.9/outgoing.c 2019-04-16 11:31:53.586762388 +0100
@@ -1264,17 +1264,6 @@ apr_status_t serf__process_connection(se
return APR_SUCCESS;
}
}
- if ((events & APR_POLLHUP) != 0) {
- /* The connection got reset by the server. On Windows this can happen
- when all data is read, so just cleanup the connection and open
- a new one.
- If we haven't had any successful responses on this connection,
- then error out as it is likely a server issue. */
- if (conn->completed_responses) {
- return reset_connection(conn, 1);
- }
- return SERF_ERROR_ABORTED_CONNECTION;
- }
if ((events & APR_POLLERR) != 0) {
/* We might be talking to a buggy HTTP server that doesn't
* do lingering-close. (httpd < 2.1.8 does this.)
@@ -1292,11 +1281,15 @@ apr_status_t serf__process_connection(se
{
apr_os_sock_t osskt;
if (!apr_os_sock_get(&osskt, conn->skt)) {
- int error;
+ int error = 0, rv;
apr_socklen_t l = sizeof(error);
- if (!getsockopt(osskt, SOL_SOCKET, SO_ERROR, (char*)&error,
- &l)) {
+ rv = getsockopt(osskt, SOL_SOCKET, SO_ERROR, (char*)&error, &l);
+ /* The error is placed in errno on Solaris for SO_ERROR */
+ if (rv)
+ error = errno;
+
+ if (error) {
status = APR_FROM_OS_ERROR(error);
/* Handle fallback for multi-homed servers.
@@ -1310,8 +1303,8 @@ apr_status_t serf__process_connection(se
&& conn->address->next != NULL
&& (APR_STATUS_IS_ECONNREFUSED(status)
|| APR_STATUS_IS_TIMEUP(status)
- || APR_STATUS_IS_ENETUNREACH(status))) {
-
+ || APR_STATUS_IS_ENETUNREACH(status)
+ || APR_STATUS_IS_EHOSTUNREACH(status))) {
conn->address = conn->address->next;
return reset_connection(conn, 1);
}
@@ -1323,6 +1316,17 @@ apr_status_t serf__process_connection(se
#endif
return APR_EGENERAL;
}
+ if ((events & APR_POLLHUP) != 0) {
+ /* The connection got reset by the server. On Windows this can happen
+ when all data is read, so just cleanup the connection and open
+ a new one.
+ If we haven't had any successful responses on this connection,
+ then error out as it is likely a server issue. */
+ if (conn->completed_responses) {
+ return reset_connection(conn, 1);
+ }
+ return SERF_ERROR_ABORTED_CONNECTION;
+ }
if ((events & APR_POLLOUT) != 0) {
if ((status = write_to_connection(conn)) != APR_SUCCESS)
return status;

View File

@ -8,7 +8,7 @@
Name: libserf
Version: 1.3.9
Release: 13%{?dist}
Release: 14%{?dist}
Summary: High-Performance Asynchronous HTTP Client Library
License: ASL 2.0
URL: http://serf.apache.org/
@ -75,6 +75,9 @@ export LD_LIBRARY_PATH=%{buildroot}%{_libdir}
%{_libdir}/pkgconfig/serf*.pc
%changelog
* Thu Nov 14 2019 Joe Orton <jorton@redhat.com> - 1.3.9-14
- revert broken IPv6 workaround
* Thu Jul 25 2019 Fedora Release Engineering <releng@fedoraproject.org> - 1.3.9-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild