int server(int argc, char* argv[])
{
    int sctp_otm_sock = -1, port_otm = -1;      // socket and port for one to many sctp
    int count = 0;
    char mbuffer[MBUFFERLEN];           // static message buffer
    struct sockaddr* addresses = NULL;
    struct sctp_event_subscribe sctp_events; // sctp events
    struct sctp_sndrcvinfo infodata;        // information about sender
    struct sctp_initmsg sctp_init;          // sctp socket option initialization

    // Add listening for 2 interruption signals
    signal(SIGTERM, sighandler);
    signal(SIGINT, sighandler);

    // not enough or too many parameters
    if(argc > 3 || argc < 2){
        return testserver_input_error((argc == 1) ? argv[0] : NULL);
    }

    // Port is not valid
    if((port_otm = atoi(argv[1])) <= 0x0400 || port_otm > 0xffff){
        return testserver_input_error(NULL);
    }

    printf("starting server on port:\t%d\n", port_otm);

    // Socket creation
    if((sctp_otm_sock = socket(PF_INET6, SOCK_SEQPACKET, IPPROTO_SCTP)) == -1){
        return error_situation();
    }

    if(argc == 3) {
        if(strcasecmp(argv[2], "ifaddrs") == 0){
            addresses = get_own_addresses_gia(&count, port_otm, NOLOOPBACK, ONLYRUNNING);
        }else if(strcasecmp(argv[2], "addrinfo") == 0){
            addresses = get_own_addresses_gai(&count, argv[1]);
        }else if(strcasecmp(argv[2], "combined") == 0){
            addresses = get_own_addresses_combined(&count, argv[1], NOLOOPBACK, ONLYRUNNING);
        }else {
            printf("Invalid parameter for address search function selection.\n \
                \tifaddrs = getifaddrs()\n\taddrinfo = getaddrinfo()\n");
            exit(1);
        }
    }else{
Example #2
0
	
	if(argc == 3) {
		if(strcasecmp(argv[2],"ifaddrs") == 0)
			addresses = get_own_addresses_gia(&count,port_otm,NOLOOPBACK,ONLYRUNNING);
		else if(strcasecmp(argv[2],"addrinfo") == 0)
			addresses = get_own_addresses_gai(&count,argv[1]);
		else if(strcasecmp(argv[2],"combined") == 0)
			addresses = get_own_addresses_combined(&count,argv[1],NOLOOPBACK,ONLYRUNNING);
		else {
			printf("Invalid parameter for address search function selection.\n \
				\tifaddrs = getifaddrs()\n\taddrinfo = getaddrinfo()\n");
			exit(1);
    		}
	}
	else
		addresses = get_own_addresses_gia(&count,port_otm,NOLOOPBACK,ONLYRUNNING);

	print_packed_addresses(count,(struct sockaddr_storage*)addresses);
	
	if(!addresses) printf("No addresses to bind\n");
#ifdef __BINDX_SEPARATELY
	else {
		int i = 0, storlen = 0, slen = 0;
	  
		// Start from the beginning
		struct sockaddr* temp = addresses;
	  
	 	while (i < count) {
	    
	    		// We need to know the size
			slen = (temp->sa_family == AF_INET ?