segf-k 1.0
Loading...
Searching...
No Matches
segfk.c
Go to the documentation of this file.
1#include <stdio.h>
2#include <stdlib.h>
3#include <string.h>
4#include <unistd.h>
5#include <sys/socket.h>
6#include <netinet/in.h>
7#include "segfk.h"
8
9void segfk_run(int port)
10{
11 int server_fd, client_fd;
12 struct sockaddr_in addr;
13 socklen_t addrlen = sizeof(addr);
14 char response[] = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nContent-Length: 13\r\nConnection: close\r\n\r\nHello, world!";
15
16 server_fd = socket(AF_INET, SOCK_STREAM, 0);
17 if (server_fd < 0) {
18 perror("socket");
19 exit(1);
20 }
21
22 int opt = 1;
23 setsockopt(server_fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt));
24
25 addr.sin_family = AF_INET;
26 addr.sin_addr.s_addr = INADDR_ANY;
27 addr.sin_port = htons(port);
28
29 if (bind(server_fd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {
30 perror("bind");
31 close(server_fd);
32 exit(1);
33 }
34
35 if (listen(server_fd, 1) < 0) {
36 perror("listen");
37 close(server_fd);
38 exit(1);
39 }
40
41 printf("Serving on port %d...\n", port);
42 while (1) {
43 client_fd = accept(server_fd, (struct sockaddr*)&addr, &addrlen);
44 if (client_fd < 0) {
45 perror("accept");
46 continue;
47 }
48 send(client_fd, response, sizeof(response) - 1, 0);
49 close(client_fd);
50 }
51 close(server_fd);
52}
void segfk_run(int port)
Starts the minimal HTTP server.
Definition segfk.c:9