diff --git a/goofy.c b/goofy.c new file mode 100644 index 0000000..b9558a1 --- /dev/null +++ b/goofy.c @@ -0,0 +1,9 @@ +#include + +char *p; +int l = 65; + +char *p = (char *) &l; + + +int q = *(int **) &p = &l; diff --git a/structs b/structs deleted file mode 100755 index 5057a9e..0000000 Binary files a/structs and /dev/null differ diff --git a/structs.c b/structs.c deleted file mode 100644 index 8d62aad..0000000 --- a/structs.c +++ /dev/null @@ -1,23 +0,0 @@ -// playing around with structs -// win 2024 - -#include - -struct abc { - int x; - int y; - int z; -}; - -int main() { - struct abc a = {0, 1, 2}; - struct abc *ptr = &a; - - printf("Address of struct a: %p\n", ptr); - - printf("Address of x in struct a: %p\n", &a.x); - printf("Address of y in struct a: %p\n", &a.y); - printf("Address of z in struct a: %p:\n", &a.z); - - return 0; -} diff --git a/webserver.c b/webserver.c index 4503532..9fcd8db 100644 --- a/webserver.c +++ b/webserver.c @@ -1,18 +1,29 @@ #include #include #include +#include #include +#include #define PORT 8080 +#define BUFFER_SIZE 1024 int main() { + char buffer[BUFFER_SIZE]; + char resp[] = "HTTP/1.0 200\r\n" + "Server: webserver-c\r\n" + "Content-type: text/html\r\n\r\n" + "hello, world\r\n"; + + // create a socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); - if(sockfd == -1) { + if (sockfd == -1) { perror("webserve (socket)"); return 1; } printf("socket created successfully\n"); + // create the address to bind the socket to struct sockaddr_in host_addr; int host_addrlen = sizeof(host_addr); @@ -20,11 +31,45 @@ int main() { host_addr.sin_port = htons(PORT); host_addr.sin_addr.s_addr = htonl(INADDR_ANY); - if(bind(sockfd, (struct sockaddr *)&host_addr, host_addrlen) != 0) { + // Bind the socket to the address + if (bind(sockfd, (struct sockaddr *)&host_addr, host_addrlen) != 0) { perror("webserver (bind)"); return 1; } printf("socket successfully bound to address\n"); + + // listen to incoming connections + if (listen(sockfd, SOMAXCONN) != 0) { + perror("webserver (listen)"); + return 1; + } + printf("server listening for connections\n"); + + for (;;) { + // accept incoming connections + int newsockfd = accept(sockfd, (struct sockaddr *)&host_addr, (socklen_t *)&host_addrlen); + if (newsockfd < 0) { + perror("webserver (accept)"); + continue; + } + printf("connection accepted\n"); + + // read from the socket + int valread = read(newsockfd, buffer, BUFFER_SIZE); + if (valread < 0) { + perror("webserver (read)"); + continue; + } + + // write to the socket + int valwrite = write(newsockfd, resp, strlen(resp)); + if (valwrite < 0) { + perror("webserver (write)"); + continue; + } + + close(newsockfd); + } return 0; }