Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: [C] Timer multipli

  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    25

    [C] Timer multipli

    Salve a tutti,
    mi ritrovo ancora qui per chiedere il vostro prezioso aiuto.
    Sto cercando di fare un programma di trasferimento file in UDP, implementando il Selective Repeat. So che il TCP sarebbe la soluzione migliore, ma a me serve in UDP.
    Ora ho risolto tutti i problemi, tranne quello dei timeout degli ack.
    Avevo pensato di usare la select, ma questa è bloccante, quindi ho pensato che mi sarebbe stato utile usarla in polling per fare in modo che il server, prima di inviare un pacchetto, controlli il buffer in entrata. A questo punto per quanto riguarda il timeout ho pensato di usare l'alarm, ma ho letto in giro che usare select insieme ad alarm potrebbe dare problemi. Tra l'altro usando l'alarm non saprei come fare per implementare un timeout per ogni pacchetto inviato della finestra, visto che ogni volta che richiamo la funzione alarm, il timer mi viene resettato.
    C'è qualche altra funzione? O un metodo per usare quelle presentate in maniera più funzionale? E' da poco che ho a che fare con la programmazione di rete in C, quindi sono un po' inesperto.
    Il linguaggio è il C e la piattaforma è Linux (a dire il vero Mac OSX, ma è uguale).
    Grazie in anticipo a tutti.

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Usa un secondo thread cn il solo select. Ci sn problemi cn il multithreads?
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    25
    Ciao linoma. Il fatto è che già padre e figlio lavorano con le fork. Praticamente il padre accetta le connessioni e i figli si occupano della trasmissione dei dati. Essendo in teoria un server a cui possono connettersi più client, ed ogni client può fare più operazioni, mettere un altro livello di processi mi incasinerebbe un bel po'.

  4. #4
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Scusa potresti spiegare un po meglio cs fai? Invii un pacchetto, aspetti la risposta e invii un'altro? O invii 10 pacchetti (threads) e poi aspetti le risposte (nn puoi aspettare)?
    Per gli Spartani e Sparta usa spartan Il mio github

  5. #5
    Originariamente inviato da Epiphone
    Ciao linoma. Il fatto è che già padre e figlio lavorano con le fork. Praticamente il padre accetta le connessioni e i figli si occupano della trasmissione dei dati. Essendo in teoria un server a cui possono connettersi più client, ed ogni client può fare più operazioni, mettere un altro livello di processi mi incasinerebbe un bel po'.
    Vai di multithread o fork. Molla i timer multipli.

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    25
    Originariamente inviato da Epiphone
    Ciao linoma. Il fatto è che già padre e figlio lavorano con le fork. Praticamente il padre accetta le connessioni e i figli si occupano della trasmissione dei dati. Essendo in teoria un server a cui possono connettersi più client, ed ogni client può fare più operazioni, mettere un altro livello di processi mi incasinerebbe un bel po'.
    Diciamo che sto implementando un trasferimento file affidabile su udp. Usando il Selective Repeat. Quindi ho una finestra, all'interno della quale invio n pacchetti e aspetto n ack. Per ogni pacchetto inviato devo mettere un timer che rimane in attesa dell'ack, e scadere nel caso in cui non arrivi, in modo da poter far partire la procedura di reinvio.

  7. #7
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Scarterei il timer xche avrebbe un timeout che nn è subordinato al traffico di dati. Userei un thread separato per la ricezione delle risposte, ma nn avendo ulteriori dettagli sul codice nn aggiungo altro.
    Per gli Spartani e Sparta usa spartan Il mio github

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2010
    Messaggi
    25
    Il fatto è che oltre al processo padre, ho un processo figlio che gestisce la trasmissione, se per ogni trasmissione ho tanti processi figli quanto è la dimensione della finestra, per un paio di client connessi, che scaricano due file ciascno, sul server avrei 20 processi! O.O
    Se, invece, un solo processo figlio mi gestisce tutte le ricezioni, mi si ripresenta il problema dei timeout!

  9. #9
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Usi in modo ambiguo alcuni termini processi e finestra. Hai threads o processi? Ripeto amio modo di vedere le cs il timer e' sconsigliato.
    Per gli Spartani e Sparta usa spartan Il mio github

  10. #10
    Originariamente inviato da Epiphone
    ho tanti processi figli quanto è la dimensione della finestra
    ?

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.