From 61f87eee3d57f8686cbf5e6b139e1b6c41f1141b Mon Sep 17 00:00:00 2001 From: verdant Date: Tue, 9 Jun 2026 16:31:17 +0800 Subject: Use sendfile() instead foreach to send single char --- server.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/server.c b/server.c index 07503e1..296c35f 100644 --- a/server.c +++ b/server.c @@ -7,6 +7,8 @@ #include #include #include +#include +#include #include int main(int argc, char **argv) @@ -70,10 +72,15 @@ int main(int argc, char **argv) strlen(http_content_type), 0); FILE *index_fd = fopen("./index.html", "r"); - char c; - while ((c = getc(index_fd)) != EOF) { - send(new_fd, &c, 1, 0); + + struct stat stat_buf; + int stat_result = fstat(fileno(index_fd), &stat_buf); + if (stat_result != 0) { + perror("fstat"); } + + sendfile(new_fd, fileno(index_fd), NULL, + stat_buf.st_size); } memset(buf, 0, 1024); -- cgit v1.2.3