Newer
Older
int print_usage(char *prog_name) {
ERROR("Usage:\n\t%s [-s stats_filename] listen_ip listen_port", prog_name);
return EXIT_FAILURE;
}
int main(int argc, char **argv) {
int opt;
char *stats_filename = NULL;
char *listen_ip = NULL;
char *listen_port_err;
while ((opt = getopt(argc, argv, "s:h")) != -1) {
switch (opt) {
case 'h':
return print_usage(argv[0]);
case 's':
stats_filename = optarg;
break;
default:
return print_usage(argv[0]);
}
}
if (optind + 2 != argc) {
ERROR("Unexpected number of positional arguments");
return print_usage(argv[0]);
}
listen_ip = argv[optind];
listen_port = (int) strtol(argv[optind + 1], &listen_port_err, 10);
if (*listen_port_err != '\0') {
ERROR("Receiver port parameter is not a number");
return print_usage(argv[0]);
}
ASSERT(1 == 1); // Try to change it to see what happens when it fails
// DEBUG_DUMP("Some bytes", 11); // You can use it with any pointer type
DEBUG("Receiver has following arguments: stats_filename is %s, listen_ip is %s, listen_port is %u",
// 1. Bind address to port
struct sockaddr_in6 * addr = (struct sockaddr_in6 *) malloc(sizeof(struct sockaddr_in6));
const char * res = real_address(listen_ip, addr);
if (res != NULL)
{
ERROR("An error occured when name resolving :\n\t%s\n", res);
return (EXIT_FAILURE);
}
int socket = create_socket(addr, listen_port, NULL, 0);
if (socket == -1)
{
close(socket);
ERROR("An error occured when creating the socket\n");
return (EXIT_FAILURE);
}
Vany Ingenzi
a validé
receiver_read_write_loop(socket, (const char *) stats_filename);
free(addr);