Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500

    [C] server concorrente con semafori

    Ciao ragazzi ho un problema con un server in C con i socket. Il server deve essere concorrente e può accettare connessioni da massimo 3 client contemporaneamente, dopodicchè si blocca fino a quando un client termina. Per implementare il server utilizzo quindi una fork in questo modo:

    codice:
    sem_wait(&my_sem);
    
    printf ("In attesa di una connessione al socket...\n");
    
    new_s = accept( s, (struct sockaddr*) &caddr, &addrlen);
    
     if ( fork() ) {
                // processo padre termina il nuovo socket
                //ritorna in attesa di un nuovo client
                close (new_s);
            }
    else  {
                close(s);
                //servo il client .......
    }
    inoltre per gestire la coda dei client utilizzo un semaforo my_sem inizializzato con:
    codice:
    sem_init(&my_sem,0,3);
    in modo da poter accettare 3 client

    Quando viene rilevato che un client chiude la connessione, chiudo il socket relativo al client e effettuo una
    codice:
    sem_post(&my_sem);
    per incrementare il semaforo e sbloccare eventuali client in attesa.

    Il problema sta nel fatto che avendo fatto FORK il processo che attende nuove connessioni e il processo che serve il client sono distinti e quindi suppongo anche le variabili....quindi anche facendo sem_post() non vado realmente a sbloccare il semaforo my_sem.

    Spero di essermi spiegato bene...il discorso è un pò complesso...spero qualcuno abbia qualche idea e riesca a darmi una mano....grazie
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

  2. #2
    Studia la memoria condivisa, sotto linux devi usare le librerie shm.h per allocare aree di memoria in comune ai processi, ai quali possono accedere e controllare il semaforo globale

  3. #3
    Utente di HTML.it L'avatar di MrX87
    Registrato dal
    Jun 2007
    Messaggi
    500
    grazie mille per la risposta...sei stato utilissimo....yeahhhh risolto...almeno per adesso facendo qualche prova così.....vedo domani meglio se funziona tutto come penso!
    grazie ancora
    "Non può piovere per sempre" Il Corvo
    Forza Vigor!

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.