GNU/Linux >> Linux Esercitazione >  >> Linux

Effetto di SO_SNDBUF

L'effetto dell'impostazione SO_SNDBUF l'opzione è diversa per TCP e UDP.

  • Per UDP questo imposta il limite sulla dimensione del datagramma , ovvero qualsiasi cosa più grande verrà scartata.
  • Per TCP questo imposta semplicemente la dimensione del buffer interno al kernel per un dato socket (con qualche arrotondamento al limite della pagina e con un limite superiore).

Dal momento che sembra che tu stia parlando di TCP, l'effetto che stai osservando è spiegato dal fatto che il socket è in modalità di blocco , quindi send(2) blocca finché il kernel non può accettare tutti i tuoi dati e/o lo stack di rete rimuove in modo asincrono i dati dalla coda e li invia alla scheda di rete, liberando così spazio nel buffer.

Inoltre, TCP è un protocollo di flusso , non conserva alcuna struttura di "messaggio". Un send(2) può corrispondere a più recv(2) s dall'altra parte e viceversa. Trattalo come flusso di byte.


SO_SNDBUF configura il buffer che l'implementazione del socket utilizza internamente. Se il tuo socket non è bloccante puoi inviare solo fino alla dimensione configurata, se il tuo socket è bloccante non ci sono limiti per la tua chiamata.


Linux
  1. Visualizza le opzioni della presa

  2. Programmazione socket TCP ad alte prestazioni in .NET C#

  3. Linux denominato socket howto

  4. Sniffa il socket del dominio UNIX

  5. Esaminando /dev/log

Proxy TCP tramite socat

Come connettere NGINX a PHP-FPM usando UNIX o TCP/IP Socket

Come proteggere il socket TCP di Docker con TLS

Qual è l'effetto dell'impostazione di un socket linux - alta priorità?

Ottieni il numero di connessioni TCP stabilite

Unix socket vs host TCP/IP:porta