Added delay to ensure all data gets sent before shutdown

This commit is contained in:
dan 2025-01-14 11:13:17 -05:00
parent 471bdb71f3
commit 7901ad145d

View File

@ -261,23 +261,41 @@ void handle_client(int client_socket) {
printf("Got data of length: %d\n", length);
// HTTP response
const char *http_response_fmt =
const char *http_headers_fmt =
"HTTP/1.1 200 OK\r\n"
"Content-Type: text/plain\r\n"
"Content-Length: %d\r\n"
"Content-Length: %u\r\n"
"Connection: close\r\n"
"\r\n%s";
"\r\n";
char headers[BUFFER_SIZE];
sprintf(headers, http_headers_fmt, length);
printf("Sending headers\n");
if (send(client_socket, headers, strlen(headers), 0) == -1) {
printf("Failed to send headers\n");
free(data);
return;
} else {
printf("Sent headers\n");
}
char *http_response = malloc(length + strlen(http_response_fmt) + 20);
if (http_response == NULL) perror("Failed to allocate HTTP response\n");
sprintf(http_response, http_response_fmt, length, data);
// Send the response to the client
send(client_socket, http_response, strlen(http_response), 0);
int total_sent = 0;
while (total_sent < length) {
int amt = length - total_sent;
int sent = send(client_socket, data+total_sent, amt, 0);
printf("Tried sending %d actually sent %d\n", amt, sent);
total_sent += sent;
}
printf("Closing connection\n");
// Close the client socket
shutdown(client_socket, SHUT_WR);
sleep(1);
close(client_socket);
free(http_response);
free(data);
}