Ein häufiger Fall beim Formen einer einzelnen TCP-Verbindung kann tatsächlich aus zwei Paaren von socatund cpipeauf UNIX-Weise wie folgt zusammengesetzt werden:
socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'
Dies simuliert eine Verbindung mit einer Bandbreite von ca. 300 kB / s von Ihrem Dienst bei :5000und bis ca. 10 kB / s und wartet auf :5555eingehende Verbindungen. Vorsichtsmaßnahme : Beachten Sie, dass diese pro Verbindung , so dass jede einzelne TCP-Verbindung diesen Betrag erhält.
Erläuterung: Der äußere (links) socatlauscht mit den angegebenen Optionen :5555als Forking-Server. Der erste cpipeBefehl in der SYSTEM:...Option drosselt dann die Daten, die in den Socket socateingegangen sind : 5555 (und kommt aus dem ersten äußeren ) auf höchstens 10 kByte / s. Diese Daten werden dann über einen anderen weitergeleitet, mit socatdem eine Verbindung hergestellt wird localhost:5000(wobei der Dienst, den Sie verlangsamen möchten, abgehört werden soll). Daten von localhost:5000 werden dann in den richtigen cpipeBefehl eingegeben, der sie (mit den angegebenen Werten) auf etwa 300 kB / s drosselt.
Die Option -ngrzu cpipeist wichtig. Es bewirkt, dass cpipe nicht gierig aus seinem Eingabedateideskriptor liest. Andernfalls bleiben möglicherweise Daten in den Puffern hängen, die nicht weitergeleitet werden, und warten auf eine Antwort.
Die Verwendung des gängigeren bufferTools anstelle von cpipeist wahrscheinlich ebenfalls möglich.
(Credits: Dies basiert auf dem "Double-Tee" -Rezept von Christophe Loor aus der socatDokumentation)