Zoccoli non bloccanti vs Zoccoli bloccanti - UDP - C e linux

4

Quando utilizzare i socket di blocco su socket non bloccanti su UDP?

Domanda 1: cosa è consigliato per il seguente scenario?

Più client inviano i dati su più socket UDP, ad esempio il client1 invia i dati sui socket 100, 101, 102, .., 105. client2 su socket 110,111,112 ... 115 ecc. I numeri di porta sono fissi per i client. Il numero di client è fisso (10). Quindi totalmente 10 * 5 socket.

I dati su ogni socket (almeno 3 socket) vengono inviati ogni pochi millisecondi. Gli altri 2 socket servono per inviare comandi e ottenere dati.

Dopo aver ricevuto i dati ci sono alcuni IO coinvolti dove scrivo sui dischi. (Non riesco a cambiare nessuno dei precedenti, cioè numero di socket, ecc.)

Domanda 2: È meglio usare Thread per questo scenario (o) Multiplexing I / O asincrono con socket non bloccanti?

    
posta m4n07 04.04.2013 - 18:16
fonte

1 risposta

4

Il solito modo è usare poll() o select() , che trovi sempre di più a tuo piacimento, con prese di blocco. Poiché accettano qualsiasi descrittore di file, lo stesso ciclo può essere utilizzato per la comunicazione tra thread o tra processi con una coppia di socket o per la lettura di input da stdin.

Una buona, piuttosto breve e precisa, la lettura è Guida di Beej alla programmazione di rete Utilizzando Internet Sockets . Controlla la sezione su select() per un piccolo programma di esempio fonte . Questo usa TCP e non UDP, quindi dovrai adattarti, ma UDP probabilmente renderà le cose più semplici (a meno che il tuo caso d'uso non stia implementando nuovamente la funzionalità TCP su UDP, che non è quasi mai una buona idea).

Potresti voler eseguire l'elaborazione in thread separati (o anche processi, a seconda dei requisiti), o solo all'interno dello stesso ciclo, a seconda di quanto sia pesante: " Dopo aver ricevuto i dati ci sono alcuni IO coinvolti dove Scrivo sui dischi. "Vorrei iniziare con un'implementazione a thread singolo e vedere come va, prima di renderlo più complesso.

    
risposta data 04.04.2013 - 23:05
fonte

Leggi altre domande sui tag