in flood_socket_keepalive.c [84:123]
apr_status_t keepalive_begin_conn(socket_t *sock, request_t *req, apr_pool_t *pool)
{
keepalive_socket_t *ksock = (keepalive_socket_t *)sock;
if (!ksock->reopen_socket && ksock->s) {
apr_status_t e;
e = ksock_check_socket(ksock, pool);
if (e != APR_SUCCESS) {
ksock->reopen_socket = 1;
}
}
if (ksock->reopen_socket || ksock->s == NULL) {
apr_status_t rv;
if (strcasecmp(req->parsed_uri->scheme, "https") == 0) {
/* If we don't have SSL, error out. */
#if FLOOD_HAS_OPENSSL
ksock->ssl = 1;
#else
return APR_ENOTIMPL;
#endif
}
else {
ksock->ssl = 0;
}
/* The return types are not identical, so it can't be a ternary
* operation. */
if (ksock->ssl)
ksock->s = ssl_open_socket(pool, req, &rv);
else
ksock->s = open_socket(pool, req, &rv);
if (ksock->s == NULL)
return rv;
ksock->reopen_socket = 0; /* we just opened it */
}
req->keepalive = 1;
return APR_SUCCESS;
}