8 const char *program_name;
10 void syscall_error(const char *err)
16 void internal_error(const char *err)
18 fprintf(stderr, "%s: %s\n", program_name, err);
23 unsigned short get_port_from_args(int argc, char **argv, int index)
26 internal_error("missing port");
28 unsigned int port = atoi(argv[index]);
30 if (port == 0 || port > USHRT_MAX)
31 internal_error("invalid port");
36 char *read_string(int fd, size_t bufsiz)
40 for (size_t i = 0;; i++) {
42 if (read(fd, &c, 1) == -1) {
48 if (c == EOF || c == 0)
54 char *address_string(struct sockaddr_in *addr)
56 char *str_addr = inet_ntoa(addr->sin_addr);
58 sprintf(str_port, "%d", ntohs(addr->sin_port));
59 char *address = malloc(strlen(str_addr) + 1 + strlen(str_port) + 1);
60 sprintf(address, "%s:%s", str_addr, str_port);