--- a/src/server/proxy/httpclient.c Fri Mar 06 18:50:23 2026 +0100 +++ b/src/server/proxy/httpclient.c Sat Mar 07 15:29:11 2026 +0100 @@ -243,7 +243,7 @@ } int http_client_process(HttpClient *client, Event *event) { - int ret = client_process(client, event); + int ret = client->stage != 2 ? client_process(client, event) : client_ws_process(client, event); if(ret && client->error == 0 && client->event.fn == NULL) { if(client_start_poll(client)) { client->error = 1; @@ -429,11 +429,18 @@ } // readiness notification if(ret == 0) { + client->transfer_buffer_pos = 0; + client->transfer_buffer_len = 0; if(client->ws_msg_ready && client->ws_msg_ready(client, client->ws_msg_ready_userdata)) { return 0; } - client->transfer_buffer_pos = 0; - client->transfer_buffer_len = 0; + + if(client->transfer_buffer_pos < client->transfer_buffer_len) { + // ws_msg_ready has added data to the transfer buffer -> flush buffer again + if(client_send_buf(client) && client->error) { + return 0; + } + } } // flush transfer2 buffer @@ -482,6 +489,10 @@ // sends the content of the transfer buffer to client->socketfd static int client_send_buf(HttpClient *client) { size_t nbytes = client->transfer_buffer_len - client->transfer_buffer_pos; + if(nbytes == 0) { + return 0; + } + //printf("reqbuf:\n\n%.*s\n\n", (int)nbytes, client->transfer_buffer + client->transfer_buffer_pos); ssize_t w; while((w = write(client->socketfd, client->transfer_buffer + client->transfer_buffer_pos, nbytes)) > 0) { client->transfer_buffer_pos += w;