Skip to content
Extraits de code Groupes Projets
receiver.c 1,93 ko
Newer Older
  • Learn to ignore specific revisions
  • #include "receiver_utils.h"
    
    
    
    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;
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        int listen_port;
    
    
        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];
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        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]);
        }
    
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        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
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        DEBUG("Receiver has following arguments: stats_filename is %s, listen_ip is %s, listen_port is %u",
    
            stats_filename, listen_ip, listen_port);
    
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        // 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);
        }
    
        receiver_read_write_loop(socket, (const char *) stats_filename);
    
    Vany Ingenzi's avatar
    Vany Ingenzi a validé
        close(socket);
    
        return EXIT_SUCCESS;
    }