Il_Cozza
10-07-2008, 10:54
Ho come compito da fare un client che richiede una tripla di risorse ad un server. Il server deve principalmente supportare multiconnessioni ed evitare starvation. Il server io l'ho già fatto, ma il mio prof dice che c'è un errore nella gestione della memoria sulla chiamata accept
void *thread_root(void *arg){
int temp_sd;
int SD = (int) arg;
while(1) { //ciclo infinito
if ((temp_sd= accept(SD, (struct sockaddr *)&client, &address_size))< 0){ //accettazione connessioni in ingresso
printf("Errore nella chiamata ACCEPT\n");
exit(-1);
}
pthread_t IDthread;
int res = pthread_create(&IDthread, NULL, thread_func, (int *) temp_sd); //creazione nuovo thread per la gestione della connessione
if (res != 0) {
printf("Creazione thread fallita!!!");
exit(0);
}else{
pthread_mutex_lock(&mutex_counter);
sockets_connected++; //incrementa il contatore dei client connessi
pthread_mutex_unlock(&mutex_counter);
}
}
}
Io sinceramente non capisco dove sia il problema. Oltretutto il programma funziona bene.
Questa funzione che ho postato è il thread che riceve come parametro il socket in ascolto, e chiama thread diversi che gestiscono le singole connessioni man mano che i client si connettono. E' un thread unico, non ce ne sono altri identici, a differenza dei vari thread che vengono chiamati a gestire le singole connessioni che sono multipli.
Se volete il codice del server completo (è un pò lungo) chiedete pure.
Ringrazio chiunque voglia aiutarmi.
Il Cozza
void *thread_root(void *arg){
int temp_sd;
int SD = (int) arg;
while(1) { //ciclo infinito
if ((temp_sd= accept(SD, (struct sockaddr *)&client, &address_size))< 0){ //accettazione connessioni in ingresso
printf("Errore nella chiamata ACCEPT\n");
exit(-1);
}
pthread_t IDthread;
int res = pthread_create(&IDthread, NULL, thread_func, (int *) temp_sd); //creazione nuovo thread per la gestione della connessione
if (res != 0) {
printf("Creazione thread fallita!!!");
exit(0);
}else{
pthread_mutex_lock(&mutex_counter);
sockets_connected++; //incrementa il contatore dei client connessi
pthread_mutex_unlock(&mutex_counter);
}
}
}
Io sinceramente non capisco dove sia il problema. Oltretutto il programma funziona bene.
Questa funzione che ho postato è il thread che riceve come parametro il socket in ascolto, e chiama thread diversi che gestiscono le singole connessioni man mano che i client si connettono. E' un thread unico, non ce ne sono altri identici, a differenza dei vari thread che vengono chiamati a gestire le singole connessioni che sono multipli.
Se volete il codice del server completo (è un pò lungo) chiedete pure.
Ringrazio chiunque voglia aiutarmi.
Il Cozza