diff -r 395c62fac7e5 -r 778dcf4ad63c src/server/proxy/httpclient.c --- a/src/server/proxy/httpclient.c Tue Feb 24 21:28:06 2026 +0100 +++ b/src/server/proxy/httpclient.c Wed Feb 25 22:16:20 2026 +0100 @@ -194,22 +194,19 @@ return http_client_add_request_header(client, cx_mutstr("transfer-encoding"), cx_mutstr("chunked")); } -static int client_start_poll(HttpClient *client, int in) { +static int client_start_poll(HttpClient *client) { client->event.fn = client_connected; client->event.finish = client_finished; - if(in) { - return ev_pollin(client->ev, client->socketfd, &client->event); - } else { - return ev_pollout(client->ev, client->socketfd, &client->event); - } + return ev_poll(client->ev, client->socketfd, &client->event); } int http_client_start(HttpClient *client) { + client->event.events = EVENT_POLLOUT; client->event.cookie = client; if(client->socketfd != -1) { int ret = client_connected(client->ev, &client->event); if(ret != 0) { - return client_start_poll(client, 1); // TODO: check event type + return client_start_poll(client); } return 0; } @@ -222,12 +219,12 @@ return 1; } client->socketfd = socketfd; - + int ret = 1; if(connect(socketfd, client->addr, client->addrlen)) { int err = errno; if(err == EINPROGRESS) { - ret = client_start_poll(client, 1); + ret = client_start_poll(client); } else { log_ereport(LOG_FAILURE, "http-client-start: connect failed: %s", strerror(err)); } @@ -326,7 +323,7 @@ event->events = EVENT_POLLIN; client->stage = 1; - if(client_read_response_header(client)) { + if(client_read_response_header(client)) { return client->error == 0; } int ret = 0; @@ -472,9 +469,9 @@ unsigned char *buffer = client->buffer.inbuf + client->buffer.cursize; size_t nbytes = client->buffer.maxsize - client->buffer.cursize; - + ssize_t r; - while((r = read(client->socketfd, buffer, nbytes)) > 0) { + while((r = read(client->socketfd, client->buffer.inbuf + client->buffer.cursize, client->buffer.maxsize - client->buffer.cursize)) > 0) { client->buffer.cursize += r; if(!client->response_header_complete) { switch(http_parser_process(client->parser)) {