PDA

Visualizza la versione completa : [C/Linux] implementare timeout nel client


SpecialOne1992
31-01-2013, 19:32
Ragazzi come posso implementare un client che possa essere interrotto o stoppato solo dopo avere ricevuto la risposta dal server o solo dopo un timeout di 2 minuti?
Grazie :)

MItaly
31-01-2013, 19:44
Difficile dirlo se non specifichi con che linguaggio e che librerie stai lavorando... :stordita:

SpecialOne1992
31-01-2013, 19:45
si hai ragione scusami. Il linguaggio è il c e lavoro su linux

MItaly
31-01-2013, 19:47
Aggiunto al titolo come "tag", in futuro ricordatene. :ciauz:

SpecialOne1992
31-01-2013, 19:49
ok grazie e scusami se non l'ho ricordato di farlo io direttamente

MItaly
31-01-2013, 19:50
Comunque, il timeout che vuoi mettere è sulla connect (=il server potrebbe non essere in linea) o sulla read (=il server è collegato ma non fornisce dati)?

SpecialOne1992
31-01-2013, 19:54
veramente questo non viene specificato nel testo ora che vedo...lo implementerei in entrambi così gestisco entrambe le possibilità

MItaly
31-01-2013, 20:22
In entrambi i casi, l'approccio più classico è usare socket non bloccanti in combinazione con la syscall select.
Crei il socket, lo imposti come non bloccante con una fcntl, chiami la connect; questa restituisce immediatamente anche se il socket non è ancora stato collegato. A questo punto, chiami la select passandole il fd del socket (come fd su cui attendere in scrittura) e il timeout; questa aspetta che il socket venga collegato o che trascorra il timeout. In base al valore restituito vedi se si è connesso oppure è scaduto il timeout. Stesso discorso per le read.
Consiglio: leggiti attentamente la manpage di select e cerca in giro indicazioni sull'IO non bloccante su sistemi Unix.

SpecialOne1992
31-01-2013, 21:04
scusami la domanda,magari stupida, in questo modo rispondo alla richiesta di un client che si sospende o si interrompe dopo un timeout, e nell'altro caso quando invece si deve interrompere o sospendere dopo aver ricevuto risposta dal server? questa parte non mi è chiara...

MItaly
31-01-2013, 21:28
Eh? :stordita:

Loading