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

    Pollfd su server UDP in C

    Ancora io....non finisce piu!!!!!
    Allora, ultimo problema e poi finalmente ho chiuso.
    Vi spiego il problema. Ho creato il mio server multiclient concorrente UDP, ed i relativi client.
    Sto lavorando su Linux (client son macchine virtuali UML).
    Il server logicamente rimane sempre in ascolto su una porta di default. Mi occorre che periodicamente si "svegli" e faccia un ciclo di letture sui messaggi client giunti.
    Nello specifico, imposto un intervallo per esempio di 10s, nel quale mi va a leggere i messaggi. Logicamente i client si connettono con tempo random per cosi' dire, nel senso che non lo posso prevedere in anticipo, quindi può essere che quando arrivino sia gia passato il tempo assegnato dal server, quindi dovrò definire un "delta*TEMPO" in modo che avrò la certezza che se anche il tempo dato è gia passato, al prossimo "delta" il client si sincronizzi senza problemi.
    Per capirci, devo sincronizzare i vari client connessi quando il server si "sveglia" e trascorsi gli Xsecondi di risveglio, mi fara un algoritmo gia implementato di calcolo di banda disponibile, e quindi risponderà a tutti i client connessi.
    Quello che dovrei ottenere è che graficando la "sincronizzazione" dei vari client (ad esempio 100), sull'asse dei tempi, vedo che effettivamente trasmettano tutti "contemporaneamente", anche se con un minimo scostamento dovuto al sistema operativo.
    Grazie

  2. #2
    #include <sys/time.h>

    int select(int nfds, fd_set *readfds, fd_set *writefds,
    fd_set *errorfds, struct timeval *timeout);

    ...

    If the timeout argument is not a null pointer, it points to
    an object of type struct timeval that specifies a maximum
    interval to wait for the selection to complete. If the
    timeout argument points to an object of type struct timeval
    whose members are 0, select() does not block. If the timeout
    argument is a null pointer, select() blocks until an event
    causes one of the masks to be returned with a valid (non-
    zero) value. If the time limit expires before any event
    occurs that would cause one of the masks to be set to a
    non-zero value, select() completes successfully and returns

    If the readfs, writefs, and errorfds arguments are all null
    pointers and the timeout argument is not a null pointer,
    select() blocks for the time specified, or until interrupted
    by a signal
    . If the readfs, writefs, and errorfds arguments
    are all null pointers and the timeout argument is a null
    pointer, select() blocks until interrupted by a signal.

    ...
    Come timeout puoi usare select, per il resto non ho capito molto


  3. #3
    Fatti un favore e utilizza http://monkey.org/~provos/libevent/ o qualcosa di analogo.
    Gestire queste cose da sè è un suicidio.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2007
    Messaggi
    34
    Ok, ma credo che il mio problema sia molto piu banale! Cerco di spiegarmi meglio.
    Io ho il mio server UDP che "dorme", si "sveglia" ogni tot secondi (x esempio10s). Come si sveglia fa una lattura delle richieste giuntegli da tutti i client (quando dormiva o anche appena svegliato), per un intervallo di tempo stabilito, x esempio 5 secondi, quindi mi calcola un algoritmo che ho fatto e risponde solo alla fine e a tutti i client insieme.

  5. #5
    E' appunto per quello che si utilizza poll(), select() e similari ed è proprio per quello che ti ho consigliato di usare un framework ad alto livello per gestire la cosa.
    Per quanto sia banale la cosa che devi fare non lo è abbastanza per gestirla a mano.
    Rilasciata Python FTP Server library 0.5.1
    http://code.google.com/p/pyftpdlib/

    We'll be those who'll make the italian folks know how difficult can be defecating in Southern California without having the crap flying all around the house.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.