#include <arpa/inet.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <unistd.h>

int main(int argc, char** argv) {
  // 1. Create the socket
  int sock = socket(AF_INET, SOCK_STREAM, 0);
  if (sock < 0) {
    printf("Could not create socket for connection to server.");
    return -1;
  }

  // 2. Set the server address
  struct sockaddr_in srv_addr;
  memset(&srv_addr, 0, sizeof(srv_addr));
  srv_addr.sin_family = AF_INET;
  srv_addr.sin_addr.s_addr = inet_addr("146.190.62.39");
  srv_addr.sin_port = htons(80);

  // 3. Connect to the server and run the loop.
  int res = connect(sock, (struct sockaddr*)&srv_addr, sizeof(struct sockaddr_in));
  if (res < 0) {
    printf("Could not connect to server.");
    return -1;
  }

  // 4. Send request -- you should really check return values.
  char* msg0 = "GET / HTTP/1.1\n";
  send(sock, msg0, strlen(msg0), 0);
  char* msg1 = "Host: www.httpforever.com\n\n";
  send(sock, msg1, strlen(msg1), 0);

  // 5. Read response
  char buf[128];
  int len = recv(sock, buf, 127, 0);
  while (len == 127) {
    buf[len] = '\0';
    printf("%s", buf);
    len = recv(sock, buf, 127, 0);
  }
  buf[len] = '\0';
  printf("%s",buf);

  // 6. Clean up
  close(sock);
  return 0;
}