#include "http.h" #include #include #include /* TODO: https://blog.netherlabs.nl/articles/2009/01/18/the-ultimate-so_linger-page-or-why-is-my-tcp-not-reliable */ int http_init(int port, int connection_amount) { int ret; int server_sock = socket(AF_INET, SOCK_STREAM, 0); if (server_sock == -1) { perror("Couldn't create socket"); return -1; } struct sockaddr_in server_addr; server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(port); if (bind(server_sock, (struct sockaddr*)&server_addr, sizeof server_addr) == -1) { perror("Couldn't bind socket"); return -1; } if (listen(server_sock, connection_amount) == -1) { perror("Cannot listen on socket"); return -1; } return server_sock; } HTTP_Request* http_accept(int server) { int client_sock = accept(server, NULL, NULL); if (client_sock == -1) { perror("Couldn't connect to client"); return NULL; } HTTP_Request *request = malloc(sizeof(HTTP_Request)); request->client_sock = client_sock; /* TODO: Read entire message and parse into request struct */ ssize_t bytes_read; size_t bufsize = 1024; char buf[bufsize]; bytes_read = read(request->client_sock, buf, bufsize - 1); if (bytes_read == -1) { perror("Failed to read data"); } printf("%s", buf); }