Lines 224-230
static int ap_proxy_wstunnel_request(apr_pool_t *p
Link Here
|
224 |
|
224 |
|
225 |
pollfd.p = p; |
225 |
pollfd.p = p; |
226 |
pollfd.desc_type = APR_POLL_SOCKET; |
226 |
pollfd.desc_type = APR_POLL_SOCKET; |
227 |
pollfd.reqevents = APR_POLLIN; |
227 |
pollfd.reqevents = APR_POLLIN | APR_POLLHUP; |
228 |
pollfd.desc.s = sock; |
228 |
pollfd.desc.s = sock; |
229 |
pollfd.client_data = NULL; |
229 |
pollfd.client_data = NULL; |
230 |
apr_pollset_add(pollset, &pollfd); |
230 |
apr_pollset_add(pollset, &pollfd); |
Lines 257-273
static int ap_proxy_wstunnel_request(apr_pool_t *p
Link Here
|
257 |
|
257 |
|
258 |
if (cur->desc.s == sock) { |
258 |
if (cur->desc.s == sock) { |
259 |
pollevent = cur->rtnevents; |
259 |
pollevent = cur->rtnevents; |
260 |
if (pollevent & APR_POLLIN) { |
260 |
if (pollevent & (APR_POLLIN | APR_POLLHUP)) { |
261 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02446) |
261 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02446) |
262 |
"sock was readable"); |
262 |
"sock was readable"); |
263 |
rv = proxy_wstunnel_transfer(r, backconn, c, bb, "sock"); |
263 |
rv = proxy_wstunnel_transfer(r, backconn, c, bb, "sock"); |
264 |
} |
|
|
265 |
else if ((pollevent & APR_POLLERR) |
266 |
|| (pollevent & APR_POLLHUP)) { |
267 |
rv = APR_EPIPE; |
268 |
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02447) |
269 |
"err/hup on backconn"); |
270 |
} |
264 |
} |
|
|
265 |
else if (pollevent & APR_POLLERR) { |
266 |
rv = APR_EPIPE; |
267 |
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02447) |
268 |
"err/hup on backconn"); |
269 |
} |
271 |
else { |
270 |
else { |
272 |
rv = APR_EGENERAL; |
271 |
rv = APR_EGENERAL; |
273 |
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02605) |
272 |
ap_log_rerror(APLOG_MARK, APLOG_NOTICE, 0, r, APLOGNO(02605) |
Lines 278-290
static int ap_proxy_wstunnel_request(apr_pool_t *p
Link Here
|
278 |
} |
277 |
} |
279 |
else if (cur->desc.s == client_socket) { |
278 |
else if (cur->desc.s == client_socket) { |
280 |
pollevent = cur->rtnevents; |
279 |
pollevent = cur->rtnevents; |
281 |
if (pollevent & APR_POLLIN) { |
280 |
if (pollevent & (APR_POLLIN | APR_POLLHUP)) { |
282 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02448) |
281 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02448) |
283 |
"client was readable"); |
282 |
"client was readable"); |
284 |
rv = proxy_wstunnel_transfer(r, c, backconn, bb, "client"); |
283 |
rv = proxy_wstunnel_transfer(r, c, backconn, bb, "client"); |
285 |
} |
284 |
} |
286 |
else if ((pollevent & APR_POLLERR) |
285 |
else if (pollevent & APR_POLLERR) { |
287 |
|| (pollevent & APR_POLLHUP)) { |
|
|
288 |
rv = APR_EPIPE; |
286 |
rv = APR_EPIPE; |
289 |
c->aborted = 1; |
287 |
c->aborted = 1; |
290 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02607) |
288 |
ap_log_rerror(APLOG_MARK, APLOG_TRACE1, 0, r, APLOGNO(02607) |