Devo inviare un pacchetto UDP di 1024 byte a contenuto nullo a tutte le porte che ho in input
nella mia funzione.

In input ho: un unsignet che indica il valore di un timeout, un ip in notazione di stringa,
ed un array di puntatori a port-number espressi in codice numerico null-terminated. Un array di puntatori
a port-number come si rappresenta?

Così?

short ** portnumber;

In tal caso come devo comportarmi per iterare tutte le porte ed inviare il pacchetto
alla coppia (ip,porta) ?

Posto tutto il codice dell'esercizio va..

codice:
int gestionesegnale(int segnale) {
    return -1;
}

#DEFINE BUFF 1024;
char *message[BUFF];

short funzione(unsigned timeout, char *ip, array di porte ecc.. (?)) {

    //Creo il socket
    int ds_sock;
    ds_sock = socket(AF_INET,SOCK_DGRAM,0);
    if(ds_sock == -1) {
        printf("Errore nella creazione del socket");
        exit(1);
    }

    //Faccio il bind
    struct sockaddr local_addr; 
    sockaddr.sin_family = AF_INET;
    sockaddr.sin_port = 0;
    sockaddr.sin_addr = INADDR_ANY;

    if(bind(ds_sock,&local_addr,sizeof(local_addr))==-1) {
        printf("Errore nel bind");
        exit(1);
    }

    //Struttura per indirizzo destinazione

    struct sockaddr remote_addr;
    sockaddr.sin_family = AF_INET;

    hostent *hp;
    hp = gethostbyname(ip);
    memcpy(&remote_addr.sin_addr, hp -> h_addr, sizeof(h_addr));

   //Qui devo gestire l'invio
    while(ci sono porte) {
        remote_addr.sin_port = htons(portacorrente (?));
    
        if(sendto(ds_sock,message,BUFF,0,&remote_addr,sizeof(remote_addr)) == -1) {
            printf("Errore nella sendto");
            exit(1);
        }
        Qui dovrei incrementare un qualche contatore per iterare le varie porte
    }

    //Qui devo ricevere un datagramma 

    int ricevuti,length_mittente_addr;
    struct sockaddr mittente_addr;
    ricevuti=0;
    length_mittente_addr=sizeof(mittente_addr);
	
    signal(SIGALARM,gestione_segnale);
    alarm(timeout);
    ricevuti=recvfrom(ds_sock,message,BUFF,0,&mittente_addr,&length_mittente_addr);
	
    if(ricevuti==-1 || errno==EINTR ||ricevuti==0){
		return -1;
    }
    return mittente_addr.sin_port;
}
Grazie