หนึ่งกรณีทั่วไปของการสร้างการเชื่อมต่อ TCP เดียวสามารถประกอบได้จริงจากคู่คู่socat
และcpipe
ในรูปแบบ UNIX ดังนี้:
socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'
นี่เป็นการจำลองการเชื่อมต่อกับแบนด์วิดท์ประมาณ 300kB / s จากบริการของคุณที่:5000
และไปที่ประมาณ 10kB / s และฟัง:5555
สำหรับการเชื่อมต่อขาเข้า Caveat : โปรดทราบว่าสิ่งนี้ต่อการเชื่อมต่อดังนั้นการเชื่อมต่อ TCP แต่ละรายการจะได้รับจำนวนนี้
คำอธิบาย: outer (ซ้าย) socat
ฟังด้วยตัวเลือกที่กำหนด:5555
เป็นเซิร์ฟเวอร์ forking cpipe
คำสั่งแรกในSYSTEM:...
ตัวเลือกจากนั้นบีบข้อมูลที่เข้าไปในซ็อกเก็ต: 5555 (และออกมาจากด้านนอกแรกsocat
) ไปที่มากที่สุด 10kByte / s ข้อมูลนั้นจะถูกส่งต่อโดยใช้อีกsocat
ที่เชื่อมต่อกับlocalhost:5000
(ที่บริการที่คุณต้องการชะลอตัวควรจะฟัง) ข้อมูลจาก localhost:5000
นั้นใส่ลงในcpipe
คำสั่งที่ถูกต้องซึ่ง (ด้วยค่าที่กำหนด) throttles ไปประมาณ 300kB / s
ตัวเลือก-ngr
ที่cpipe
สำคัญ มันทำให้ cpipe อ่านไม่โลภโมรีจาก file-descriptor มิฉะนั้นคุณอาจติดกับข้อมูลในบัฟเฟอร์ที่ไม่ได้ถูกส่งต่อและรอการตอบกลับ
การใช้buffer
เครื่องมือทั่วไปแทนที่จะcpipe
เป็นไปได้เช่นกัน
(เครดิต: เป็นไปตามสูตร "double-tee" โดย Christophe Loor จากsocat
เอกสารประกอบ)