diff --git a/webserver b/webserver index 78ed470..7a6d89f 100755 Binary files a/webserver and b/webserver differ diff --git a/webserver.c b/webserver.c index 9fcd8db..e1d00f4 100644 --- a/webserver.c +++ b/webserver.c @@ -10,7 +10,7 @@ int main() { char buffer[BUFFER_SIZE]; - char resp[] = "HTTP/1.0 200\r\n" + char resp[] = "HTTP/1.0 200 OK\r\n" "Server: webserver-c\r\n" "Content-type: text/html\r\n\r\n" "hello, world\r\n"; @@ -18,7 +18,7 @@ int main() { // create a socket int sockfd = socket(AF_INET, SOCK_STREAM, 0); if (sockfd == -1) { - perror("webserve (socket)"); + perror("webserver (socket)"); return 1; } printf("socket created successfully\n"); @@ -31,8 +31,12 @@ int main() { host_addr.sin_port = htons(PORT); host_addr.sin_addr.s_addr = htonl(INADDR_ANY); + // create client address + struct sockaddr_in client_addr; + int client_addrlen = sizeof(client_addr); + // Bind the socket to the address - if (bind(sockfd, (struct sockaddr *)&host_addr, host_addrlen) != 0) { + if (bind(sockfd, (struct sockaddr *) &host_addr, host_addrlen) != 0) { perror("webserver (bind)"); return 1; } @@ -47,13 +51,20 @@ int main() { for (;;) { // accept incoming connections - int newsockfd = accept(sockfd, (struct sockaddr *)&host_addr, (socklen_t *)&host_addrlen); + int newsockfd = accept(sockfd, (struct sockaddr *) &host_addr, (socklen_t *) &host_addrlen); if (newsockfd < 0) { perror("webserver (accept)"); continue; } printf("connection accepted\n"); + // get client address + int sockn = getsockname(newsockfd, (struct sockaddr *) &client_addr, (socklen_t *) &client_addrlen); + if(sockn < 0) { + perror("webserver (getsockname)"); + continue; + } + // read from the socket int valread = read(newsockfd, buffer, BUFFER_SIZE); if (valread < 0) { @@ -61,6 +72,11 @@ int main() { continue; } + // read the request + char method[BUFFER_SIZE], uri[BUFFER_SIZE], version[BUFFER_SIZE]; + sscanf(buffer, "%s %s %s", method, uri, version); + printf("[%s:%u] %s %s %s\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port), method, version, uri); + // write to the socket int valwrite = write(newsockfd, resp, strlen(resp)); if (valwrite < 0) {