|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Apr 2007
Messaggi: 51
|
[c] select in a while
Buonasera a tutti,
all'interno di un programma client/server che sto scrivendo ho riscontrato un comportamento che non mi aspettavo, devo studiare il caso, ma intanto ve lo presento: la struttura è quella solita, socket (PF_INET), poi bind, listen e accept sul server, socket e connect dal clent.... tutto bene! Gli indirizzi dell'uno e dell'altro vengono letti bene ecc. A questo punto volevo ottenere il seguente comportamento: 1) Server: connessione persistente, gestione di 1 solo client (il prox step è il multiclient), capacità di soddisfare richieste multiple del client. quindi ho messo tutta la routine di interpretazione e risposta alle richieste del client DOPO la accept all'interno di un bel ciclo "while (1)". Quindi il comportamento che ritrovo è che i due si connettono, il client fa una richiesta, il server la soddisfa e si ri-mette in ascolto per la richiesta successiva. E' poi il client che chiude la connessione (digito EXIT) quando decide l'utente. A questo punto però volevo aggiungere una funzionalità, volevo che dopo 1 min di tempo di INATTIVITA' della socket, il SERVER decidesse di chiudere la socket e terminare. FACILE (pensavo io) uso la select all'interno del ciclo while, così ogni volta che il server è in attesa di richieste dal client parte il countdown, se scade il tempo il server termina. Perfetto! funziona ESATTAMENTE così..... AL PRIMO "GIRO" DEL WHILE, ovvero, la prima volta fa così, ma se io invio dal client un primo comando, il server risponde e poi DOVREBBE tornare alla select, ma questa volta (la select NON da errore) il programma non si mette correttamente in attesa. Qualcun altro ha problemi (o ancor meglio soluzioni) di questo tipo? E come le ha risolte? Ciao |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Apr 2007
Messaggi: 51
|
scusate, credo proprio di aver commesso io un errore in una funzione che pregiudica la corretta implementazione di select().
Adesso vedo di fare qualche controllo, poi ci si risente. Ciao.... per ora |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 00:32.