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

    [C++] Problema di banda

    ciao,
    ho un programma il quale invia su socket via TCP/IP pacchetti din una certa dimensione, diciamo 30 caratteri ogni 10 ms: mi chiedo se a questo modo sto saturando la mia rete da 100 Mbit/s

    Facendo qualche conto ho che:

    30 x 8 = 240 bit/10 ms

    ogni secondo invece invio
    1000 ms:10 ms=100
    240 bit x 100 = 24000 bit/s

    Tali valori a me sembrano molto lontani da 100 Mbit/s

    grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    possibile che non riesca ad inviare più di 200000 caratteri al secondo?

  3. #3
    Se trasmetti uno stream continuo di dati a che velocità va?
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    ora sembra che viaggi a 12 MB/s, mi sono accorto che era colpa della visualizzazione real-time.
    Sbaglio oppure se si usa una socke NON bloccante si ha maggior controllo su ciò che avviene?
    So che è una domanda apparentemente banale ma è dettata ancora dalla poca esperienza nell'uso delle socket. Mi sono accorto che usando una socket non bloccante, se l'API preposta non riesce ad inviare i dati ritorna un codice di errore.
    A questo punto calibrando opportunamente un tempo di invio in modo però empirico si riesce ad ottenere un flusso continuo, cosa quasi impossibile se si susa una socket bloccante in quanto, in questo caso, non si ha alcun controllo su ciò che avviene.

  5. #5
    Quote Originariamente inviata da misterx Visualizza il messaggio
    ora sembra che viaggi a 12 MB/s, mi sono accorto che era colpa della visualizzazione real-time.
    Sbaglio oppure se si usa una socke NON bloccante si ha maggior controllo su ciò che avviene?
    No, non è così.
    Quote Originariamente inviata da misterx Visualizza il messaggio
    l'API preposta non riesce ad inviare i dati ritorna un codice di errore.
    Anche nel caso di socket bloccante.

    Hai provato a disabilitare l'algoritmo di Nagle? Hai controllato che la rete riesca a supportare effettivamente 100Mbps (tipicamente valore teorico) con qualche programma tipo iperf?

    Comunque, in linea generale, se vuoi sfruttare tutta la banda devi fornire grandi quantità di dati che poi lo stack TCP/IP del tuo OS si occuperà di distribuire propriamente per riempire tutto il segmento dati e ciò verrà effettuato chiaramente in molteplici chiamate all'API.
    Ultima modifica di signoredeltempo; 25-04-2015 a 15:59

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    577
    Quote Originariamente inviata da signoredeltempo Visualizza il messaggio
    No, non è così.

    Anche nel caso di socket bloccante.

    Hai provato a disabilitare l'algoritmo di Nagle? Hai controllato che la rete riesca a supportare effettivamente 100Mbps (tipicamente valore teorico) con qualche programma tipo iperf?

    Comunque, in linea generale, se vuoi sfruttare tutta la banda devi fornire grandi quantità di dati che poi lo stack TCP/IP del tuo OS si occuperà di distribuire propriamente per riempire tutto il segmento dati e ciò verrà effettuato chiaramente in molteplici chiamate all'API.

    ops....chiedo scusa per il forte ritardo nella mia replica.
    Nel caso di socket bloccante, per quanto rigurda qualche l'errore, mi pare che se l'invio dei dati non avviene, vi è un ulteriore inoltro sino a quando tutto il buffer del tcp/ip viene svuotato ed il thread quindi rimane bloccato. Questo è quanto ho capito io. Se invece uso un sochet non bloccante, nel caso di mancato invio ho immediatamente un errore di ritorno e posso decidere il da farsi.

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