Advertisement
lukicdarkoo

Basic implementation of HTTP Server in C

Dec 1st, 2015
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.74 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/socket.h>
  4. #include <arpa/inet.h>
  5. #include <unistd.h>
  6. #include <err.h>
  7.  
  8. #define DEFAULT_BUFLEN 1024
  9. #define DEFAULT_PORT 80
  10.  
  11. char response[] =  "HTTP/1.1 200 OK\r\n"
  12. "Server: LDServer\r\n"
  13. "Last-Modified: Tue, 1 Dec 2015 19:15:56 GMT\r\n"
  14. "Vary: Accept-Encoding\r\n"
  15. "Content-Type: text/plain\r\n\r\n"
  16. "By LukicDarkoo :)\r\n";
  17.  
  18. int main() {    
  19.     struct sockaddr_in server_address;
  20.     struct sockaddr_in client_address;
  21.     int client_socket;
  22.     int server_socket = socket(AF_INET, SOCK_STREAM, 0);
  23.  
  24.     // Check if connection is established
  25.     if (server_socket == -1) {
  26.         err(1, "Can't open socket");
  27.     }
  28.    
  29.     // Define socket & bind
  30.     server_address.sin_family = AF_INET;
  31.     server_address.sin_addr.s_addr = INADDR_ANY;
  32.     server_address.sin_port = htons(DEFAULT_PORT);
  33.  
  34.     if (bind(server_socket, (struct sockaddr *)&server_address, sizeof(server_address)) == -1) {
  35.         err(1, "Can't bind socket");
  36.     }
  37.  
  38.     // Listen for connections
  39.     listen(server_socket, 3);
  40.  
  41.  
  42.     // Connect to client
  43.     puts("Listening...");
  44.     int client_address_size = sizeof(client_address);
  45.     client_socket = accept(server_socket, (struct sockaddr *)&client_address, (socklen_t *)&client_address_size);
  46.     if (client_socket < 0) {
  47.         err(1, "Can't accept connection");
  48.     }
  49.  
  50.     write(client_socket, response, sizeof(response) - 1);
  51.  
  52.     // Read message from client
  53.     puts("Reading answer...");
  54.     char message[DEFAULT_BUFLEN];
  55.     int message_size = 0;
  56.     while (1) {
  57.         message_size = recv(client_socket, message, DEFAULT_BUFLEN, 0);
  58.         message[message_size] = 0;
  59.         if (message_size > 0) {
  60.             printf("%s", message);
  61.             break;
  62.         }
  63.     }
  64.    
  65.     puts("Closing client and socket...");
  66.     close(client_socket);
  67.     close(server_socket);
  68.    
  69.    
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement