/* A simple program to produce the information needed to invoke socket
   calls without the proper header files, e.g. for .signature-sized
   socket programs. */

#define _BSD_SOURCE

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>

int main() {
  int fd = socket(PF_INET, SOCK_STREAM, 0);
  struct sockaddr_in sin = { 0 };
  printf("fd = socket(%d, %d, %d) -> %d\n", PF_INET, SOCK_STREAM, 0, fd);
  sin.sin_family = AF_INET;
  inet_aton("207.241.238.32", &sin.sin_addr); /* a server of mine */
  sin.sin_port = 2048;

  printf("connect(fd, \"");
  for (int ii = 0; ii < sizeof sin; ii++) {
    printf("\\%o", ((unsigned char*)&sin)[ii]);
  }
  printf("\", %d) -> ", sizeof sin);

  int rv = connect(fd, &sin, 16);
  printf("%d\n", rv);
  if (rv < 0) perror("connect");
  
  return 0;

}

