Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448

    [C-Unix] timeout su una recvfrom()

    Mi trovo a dover imparare la programmazione C in ambiente Unix, nello specifico l'uso dei socket.

    Un esercizio che sto svolgendo mi chiede di realizzare una funzione che prende in ingresso un unsigned che indichi un valore di timeout, una stringa che rappresenta un indirizzo IP ed un array null terminated contenente numeri di porte.
    La funzione deve inviare un pacchetto UDP (di dimensione 1024 byte a contenuto nullo) a tutte le coppie IP-porta e poi mettersi in attesa di un qualsiasi pacchetto in risposta.
    Se non riceve niente entro il timeout deve ritornare -1, altrimenti il numero di porta del processo che ha risposto per primo.

    Il mio problema sta nell'impostare il timeout.

    Ciò che ho scritto fin'ora è questo
    codice:
    #define BUFLEN 1024
    
    function comUDP( unsigned timeout, char* ip, int ports[] )
    {
    	int s_ds_sock, c_ds_sock;
    	struct sockaddr_in server_socket, client_socket;
    	char msg[BUFLEN] = NULL;
    	
    	//creo il socket su cui il server riceverà i dati
    	s_ds_sock = socket (AF_INET, SOCK_DGRAM, 0);
    	
    	server_socket.sin_family = AF_INET;
    	server_socket.sin_port = 2000;
    	server_socket.sin_addr.s_addr = INADDR_ANY;
    	
    	bind (s_ds_sock, &server_socket, sizeof(server_socket));
    	
    	int i = 0;
    	
    	//finché ci sono unmeri di porta nell'array
    	while (ports[i] != NULL)
    	{
    		//creo il relativo socket
    		c_ds_sock = socket (AF_INET, SOCK_DGRAM, 0);
    		
    		client_socket.sin_family = AF_INET;
    		client_socket.sin_port	 = ports[i];
    		client_socket.sin_addr	 = ip;
    		
    		//invio il pacchetto
    		sendto (c_ds_sock, msg, BUFLEN, &client_socket, sizeof(client_socket));
    		
    		//chiudo il socket col client
    		close(c_ds_socket);
    		
    		//passo all'eventuale porta seguente
    		i++;
    	}
    	
    	//qui dovrei fare il controllo sul timeout
    	if ( recvfrom (s_ds_socket, msg, BUFLEN, &server_socket, sizeof(server_socket)) !== -1 )
    	{
    		
    	}
    	else
    	{
    		
    	}
    	
    	//chiudo il socket del server
    	close(s_ds_socket);
    }
    Come si specifica di aspettare fino al timeout?
    Ultima modifica di Alhazred; 19-03-2014 a 14:13

  2. #2
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,448
    Grazie

  4. #4
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.