Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    5

    Connect() timeout

    Salve ragazzi, ho un piccolo programma da implementare.. in particolare lui esegue il connect:

    if (connect(sfd,(struct sockaddr *)&dest_addr,sizeof(dest_addr))<0) {
    perror("connect()");

    ma vorrei un timeout che dopo un tot di secondi se l'ip/host non risponde termina l'esecuzione, come posso fare?
    Grazie in anticipo,
    Saluti.

  2. #2
    la funzione connect() dei RAW Socket ha già un timeout specifico, che, varia in base al sistema operativo utilizzato, perché vuoi scegliere un tuo timeout?
    CrystalSoft | Software House & Web Agency di WinRefine, Mercante in Fiera e altro...
    Annunci Zoo | Annunci gratuiti per il mondo degli Animali
    ElettroMercatino | Annunci a tema Informatico ed Elettronico

  3. #3
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Di quale linguaggio stiamo parlando?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    5
    E' scritto in C, ho provato ma non sembra avere già la funzione timeout

  5. #5
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    il timeout di sistema esiste ma è piuttosto lungo, nell'ordine dei minuti...
    Per il tuo scopo devi usare una socket non bloccante che prevede l'impostazione di un timeout specifico... ovviamente la tua connect non sarà più bloccante e dovrai gestirla tramite il comando select.
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2007
    Messaggi
    5
    Ciao Habanero,
    Come avrai ben capito non sono molto pratico di C, è da poco che lo sto studiando.
    Puoi farmi degli esempi così vedo di integrarlo nel codice esistente?
    Grazie 1000

  7. #7
    Moderatore di Sicurezza informatica e virus L'avatar di Habanero
    Registrato dal
    Jun 2001
    Messaggi
    9,782
    windows o linux?

    qui una semplice traccia per windows:

    codice:
      SOCKET sd;
      fd_set fds;
      struct timeval timeout;
      unsigned long cmd;
    
      // definizione strutture .....
      // ...
    
      if ((sd=socket(AF_INET,SOCK_STREAM,0))<0) 
          { printf("err:sock\n");
            exit(-1);
          }
    
      // imposto socket non boccante
      cmd=1;
      ioctlsocket( sd, FIONBIO, &cmd);
    
      // dati per Select
      timeout.tv_sec = 3;    // numero di secondi per il timeout
      timeout.tv_usec = 0;   // numero di microsecondi per il timeout
      FD_ZERO(&fds);
      FD_SET(sd, &fds); // aggiungo sd all'elenco dei socket gestiti da select
    
      // ritorna sempre l'errore WSAEWOULDBLOCK!!
      connect(sd,(struct sockaddr *)&rem_ind,sizeof(struct sockaddr_in)); 
    
      if (select(sd+1, 0, &fds, 0, &timeout)>0)  //il primo argomento di select è ignorato sotto windows
      {
       printf("# connesso\n");
       
       //ripristino socket bloccante
       cmd=0;
       ioctlsocket( sd, FIONBIO, &cmd);
       
       // invio-ricezione dati su socket in modo bloccante (tradizionale)
       // ....
      }
      else printf("# timeout!\n");

    se operi su linux devi sostiruire la funzione ioctlsocket() con ioctl()... ma su linux non ho testato il codice...
    Leggi il REGOLAMENTO!

    E' molto complicato, un mucchio di input e output, una quantità di informazioni, un mucchio di elementi da considerare, ho una quantità di elementi da tener presente...
    Drugo

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.