Ein häufiger Fall beim Formen einer einzelnen TCP-Verbindung kann tatsächlich aus zwei Paaren von socat
und cpipe
auf 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 :5000
und bis ca. 10 kB / s und wartet auf :5555
eingehende 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) socat
lauscht mit den angegebenen Optionen :5555
als Forking-Server. Der erste cpipe
Befehl in der SYSTEM:...
Option drosselt dann die Daten, die in den Socket socat
eingegangen sind : 5555 (und kommt aus dem ersten äußeren ) auf höchstens 10 kByte / s. Diese Daten werden dann über einen anderen weitergeleitet, mit socat
dem 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 cpipe
Befehl eingegeben, der sie (mit den angegebenen Werten) auf etwa 300 kB / s drosselt.
Die Option -ngr
zu cpipe
ist 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 buffer
Tools anstelle von cpipe
ist wahrscheinlich ebenfalls möglich.
(Credits: Dies basiert auf dem "Double-Tee" -Rezept von Christophe Loor aus der socat
Dokumentation)