Die Auswirkung der Einstellung SO_SNDBUF
Die Option ist für TCP und UDP unterschiedlich.
- Für UDP setzt dies die Grenze für die Größe des Datagramms , d. h. alles, was größer ist, wird verworfen.
- Für TCP legt dies nur die Größe des In-Kernel-Puffers für einen gegebenen Socket fest (mit einer gewissen Rundung zur Seitengrenze und mit einer Obergrenze).
Da es so aussieht, als würden Sie über TCP sprechen, erklärt sich der von Ihnen beobachtete Effekt dadurch, dass sich der Socket im Blockiermodus befindet , also send(2)
blockiert, bis der Kernel alle Ihre Daten akzeptieren kann, und/oder der Netzwerkstapel Daten asynchron aus der Warteschlange nimmt und sie auf die Netzwerkkarte schiebt, wodurch Speicherplatz im Puffer freigegeben wird.
Außerdem ist TCP ein Stream-Protokoll , behält es keine "Nachrichten"-Struktur bei. Ein send(2)
kann mehreren recv(2)
entsprechen s auf der anderen Seite und umgekehrt. Behandeln Sie es als Byte-Stream.
SO_SNDBUF
konfiguriert den Puffer, den die Socket-Implementierung intern verwendet. Wenn Ihr Socket nicht blockiert, können Sie nur bis zur konfigurierten Größe senden, wenn Ihr Socket blockiert, gibt es keine Beschränkung für Ihren Anruf.