mirror of
https://github.com/apache/httpd.git
synced 2025-08-08 15:02:10 +03:00
* Make the connection timeout to backends work by temporarily setting the
socket to non blocking mode. Submitted by: Matt Stevenson <mavricknzwork yahoo.com> Reviewed by: rpluem git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@703998 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
4
CHANGES
4
CHANGES
@@ -2,6 +2,10 @@
|
|||||||
Changes with Apache 2.3.0
|
Changes with Apache 2.3.0
|
||||||
[ When backported to 2.2.x, remove entry from this file ]
|
[ When backported to 2.2.x, remove entry from this file ]
|
||||||
|
|
||||||
|
*) mod_proxy: Make the connection timeout to backends work by temporarily
|
||||||
|
setting the socket to non blocking mode.
|
||||||
|
[Matt Stevenson <mavricknzwork yahoo.com>]
|
||||||
|
|
||||||
*) Worker MPM: Crosscheck that idle workers are still available before using
|
*) Worker MPM: Crosscheck that idle workers are still available before using
|
||||||
them and thus preventing an overflow of the worker queue which causes
|
them and thus preventing an overflow of the worker queue which causes
|
||||||
a SegFault. PR 45605 [Denis Ustimenko <denusk gmail.com>]
|
a SegFault. PR 45605 [Denis Ustimenko <denusk gmail.com>]
|
||||||
|
@@ -2358,6 +2358,17 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const char *proxy_function,
|
|||||||
"proxy: %s: fam %d socket created to connect to %s",
|
"proxy: %s: fam %d socket created to connect to %s",
|
||||||
proxy_function, backend_addr->family, worker->hostname);
|
proxy_function, backend_addr->family, worker->hostname);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Temporarily set the socket to non blocking to make connection
|
||||||
|
* timeouts (set via connectiontimeout) work.
|
||||||
|
*/
|
||||||
|
if ((rv = apr_socket_opt_set(newsock, APR_SO_NONBLOCK, 1))
|
||||||
|
!= APR_SUCCESS) {
|
||||||
|
ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
|
||||||
|
"apr_socket_opt_set(SO_NONBLOCK): Failed to set"
|
||||||
|
" the socket to non blocking mode");
|
||||||
|
}
|
||||||
|
|
||||||
/* make the connection out of the socket */
|
/* make the connection out of the socket */
|
||||||
rv = apr_socket_connect(newsock, backend_addr);
|
rv = apr_socket_connect(newsock, backend_addr);
|
||||||
|
|
||||||
@@ -2374,6 +2385,13 @@ PROXY_DECLARE(int) ap_proxy_connect_backend(const char *proxy_function,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((rv = apr_socket_opt_set(newsock, APR_SO_NONBLOCK, 0))
|
||||||
|
!= APR_SUCCESS) {
|
||||||
|
ap_log_error(APLOG_MARK, APLOG_ERR, rv, s,
|
||||||
|
"apr_socket_opt_set(SO_NONBLOCK): Failed to set"
|
||||||
|
" the socket to blocking mode");
|
||||||
|
}
|
||||||
|
|
||||||
/* Set a timeout on the socket */
|
/* Set a timeout on the socket */
|
||||||
if (worker->timeout_set == 1) {
|
if (worker->timeout_set == 1) {
|
||||||
apr_socket_timeout_set(newsock, worker->timeout);
|
apr_socket_timeout_set(newsock, worker->timeout);
|
||||||
|
Reference in New Issue
Block a user