Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18

    Opzione TIMEOUT su risposta server

    continuo a girare intorno ad un problema. un mio client ha bisogno di una risposta dal server. il server può però simulare un errore BLOCCO che lo rende praticamente inutilizzabile. a questo punto il mio client resterebbe bloccato sulla recv. c'è un modo per inserire un intervallo di tempo d'attesa?per esempio 10 secondi.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Moderazione

    Magari occorre specificare almeno il linguaggio di programmazione usato, visto che è obbligatorio come da Regolamento interno.

    Inoltre, sarebbe opportuno postare la parte di codice interessata dal problema, all'interno degli appositi tag CODE, sempre come specificato nel regolamento...


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18
    chiedo scusa, altre volte ho aperto discussioni in modo conforme al regolamento, ma stavolta mi è proprio sfuggito!
    il linguaggio è il C. LeleFT, potresti modificare il titolo gentilmente?

    per quanto riguarda il codice, è una cosa abbastanza semplice. questo è il mio lato client, che usa una recv bloccante.
    il server potrebbe generare un errore bloccante, quindi non invierà mai una risposta al client che resterà bloccato.
    vorrei perciò mettere una specie di timer sul client per poterlo liberare.

    codice:
    while(1){ 
    ris=recv(serverfd,risInf.buf+ris,sizeof(risInf.buf),0);
    if (ris<=0){break;}/*non riceve più nulla quindi può uscire da questo while altrimenti fa di nuovo la recv*/ 
    }

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Originariamente inviato da rschirin
    il linguaggio è il C. LeleFT, potresti modificare il titolo gentilmente?
    Fatto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18
    nessuna possibile soluzione?

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2011
    Messaggi
    18
    se mai qualcuno fosse interessato, basta usare setsockopt con il flag SO_RCVTIMEO e specificare una struttura timeval con i valori voluti.
    codice:
    struct timeval tv; /* struttura definita per INACTIVITY_TIMEOUT_SECONDS	*/
                tv.tv_sec = 10;
                tv.tv_usec = 0;
                if (setsockopt(fd, SOL_SOCKET, SO_RCVTIMEO, (char *)&tv,  sizeof tv))
                {
                  perror("setsockopt");
                  return -1;
                }
    questo prima che venga fatta la connect

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.