"proxy: CONNECT: error creating client apr_socket_t");
return HTTP_INTERNAL_SERVER_ERROR;
}
- apr_poll_socket_add(pollfd, client_sock, APR_POLLIN);
+/* apr_poll_socket_add(pollfd, client_sock, APR_POLLIN);*/
#endif
+ apr_poll_socket_add(pollfd, r->connection->client_socket, APR_POLLIN);
/* Add the server side to the poll */
apr_poll_socket_add(pollfd, sock, APR_POLLIN);
- apr_poll_socket_add(pollfd, r->connection->client_socket, APR_POLLIN);
while (1) { /* Infinite loop until error (one side closes the connection) */
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server, "proxy: CONNECT: going to sleep (poll)");
- if(apr_poll(pollfd, &pollcnt, -1) != APR_SUCCESS)
+/* ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server, "proxy: CONNECT: going to sleep (poll)");*/
+ if (apr_poll(pollfd, &pollcnt, -1) != APR_SUCCESS)
{
apr_socket_close(sock);
ap_log_rerror(APLOG_MARK, APLOG_ERR, 0, r, "proxy: CONNECT: error apr_poll()");
return HTTP_INTERNAL_SERVER_ERROR;
}
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
- "proxy: CONNECT: woke from select(), i=%d", pollcnt);
+/* ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
+ "proxy: CONNECT: woke from select(), i=%d", pollcnt);*/
if (pollcnt) {
- apr_poll_revents_get(&pollevent, sock, pollfd);
+ apr_poll_revents_get(&pollevent, sock, pollfd);
if (pollevent & APR_POLLIN) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
- "proxy: CONNECT: sock was set");
- nbytes = HUGE_STRING_LEN;
- if(apr_recv(sock, buffer, &nbytes) == APR_SUCCESS) {
+/* ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
+ "proxy: CONNECT: sock was set");*/
+ nbytes = sizeof(buffer);
+ if (apr_recv(sock, buffer, &nbytes) == APR_SUCCESS) {
int o = 0;
while(nbytes)
{
i = nbytes;
- apr_send(r->connection->client_socket, buffer + o, &i);
+ if (apr_send(r->connection->client_socket, buffer + o, &i) != APR_SUCCESS)
+ break;
o += i;
nbytes -= i;
}
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
- "proxy: CONNECT: wrote %d bytes to client", nbytes);
}
else
break;
}
+ else if ((pollevent & APR_POLLERR) || (pollevent & APR_POLLHUP))
+ break;
+
apr_poll_revents_get(&pollevent, r->connection->client_socket, pollfd);
if (pollevent & APR_POLLIN) {
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
- "proxy: CONNECT: client was set");
- nbytes = HUGE_STRING_LEN;
- if(apr_recv(r->connection->client_socket, buffer, &nbytes) == APR_SUCCESS) {
+/* ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0, r->server,
+ "proxy: CONNECT: client was set");*/
+ nbytes = sizeof(buffer);
+ if (apr_recv(r->connection->client_socket, buffer, &nbytes) == APR_SUCCESS) {
int o = 0;
while(nbytes)
{
i = nbytes;
- apr_send(sock, buffer + o, &i);
+ if (apr_send(sock, buffer + o, &i) != APR_SUCCESS)
+ break;
o += i;
nbytes -= i;
}
- ap_log_error(APLOG_MARK, APLOG_DEBUG|APLOG_NOERRNO, 0,
- r->server, "proxy: CONNECT: wrote %d bytes to server", nbytes);
}
else
break;
}
+ else if ((pollevent & APR_POLLERR) || (pollevent & APR_POLLHUP))
+ break;
}
else
break;