[Pluto-help] Comunicazione di rete: Aiuto.

diego.joker a inwind.it diego.joker a inwind.it
Mar 19 Mar 2002 16:48:45 CET


Ciao a tutti, sto facendo un driver per comunicazione di rete con KDE, ma ho dei problemi con l'identificatore degli IP address chiamanti:
cioè una volta fatto accept salvo l'identificatore di socket creato dal server in un array e l'indirizzo IP dell'host che mi ha chiamato, in un altro array sempre allo stesso indice in cui ho salvato l'ID di socket, e poi incremento l'indice così da non sovrascrivere i dati salvati. Il problema è che nel momento in cui arriva una seconda chiamata, l'ID di socket viene correttamente salvato nell'indice successivo, lasciando inalterato il precedente valore, mentre nel caso dell'array degli IP address mi vengono sovrascritti tutti i precedenti valori memorizzati con l'ultimo indirizzo IP chiamante. Non riesco proprio a capire che tipo di errore ho fatto considerando che il codice per settare i due array è identico e uno funziona e l'altro no. Perchè? Spero che possiate aiutarmi perchè non so come uscirne; vi riporto sotto il codice in questione:

// thread per la gestione dell' accept
void *accept_thread(void*arg)
{	  		
	sockaddr_in from;
	int sockNum=(int)arg;
	int newSock;
	unsigned int fromLen=sizeof(from);
	for(;;)	// ciclo continuo per la gestione delle chiamate
	{      				
   		if (  (newSock=::accept(sockNum,(struct sockaddr *)&from,&fromLen))  > 0 )
   		{
   			set_idconn(newSock);	// salvo l'ID socket nel primo buffer
   			char*host=::inet_ntoa(from.sin_addr);
			set_idhost(host);		// salvo l'IP address nel secondo buffer
    		}
	}
	pthread_exit((void*)0);
}

// array degli ID di connesione
void set_idconn(int idconn)
{
	for (int i=0;i<31;i++)	// 32 è il numero massimo di connessioni che posso stabilire
	{
		if (i>31) throw;
		if (array_conn[i]==0)
		{
			array_conn[i]=idconn;
			break;
		}
	}
}

// array degli IP address
void set_idhost(char* host)
{
	for (int i=0;i<31;i++)
	{
		if (i>31) throw;
		if (array_host[i]==0)
		{
			array_host[i]=host;
			break;
		}
	}
}






More information about the pluto-help mailing list