Un caso común de conformar una sola conexión TCP puede en realidad ensamblarse a partir de pares duales socaty cpipede manera UNIX de esta manera:
socat TCP-LISTEN:5555,reuseaddr,reuseport,fork SYSTEM:'cpipe -ngr -b 1 -s 10 | socat - "TCP:localhost:5000" | cpipe -ngr -b 1 -s 300'
Esto simula una conexión con ancho de banda de aproximadamente 300 kb / s de su servicio en :5000y a aproximadamente 10 kB / s, y escuchas en :5555las conexiones entrantes. Advertencia : Tenga en cuenta que esto por conexión , por lo que cada conexión TCP individual obtiene esta cantidad.
Explicación: El exterior (izquierda) socatescucha con las opciones dadas :5555como un servidor de bifurcación. El primer cpipecomando en la SYSTEM:...opción a continuación estrangula datos, que entró en socket: 5555 (y sale del primero, externo socat) a como máximo 10kByte / s. Esos datos se reenvían usando otro socatque se conecta localhost:5000(donde el servicio que desea ralentizar debería estar escuchando). Luego, los datos de localhost:5000 se colocan en el cpipecomando correcto , que (con los valores dados) lo acelera a aproximadamente 300kB / s.
La opción -ngra cpipees importante. Hace que cpipe lea de forma no codiciosa desde su descriptor de archivo de entrada. De lo contrario, es posible que se quede atascado con los datos en los buffers que no se reenvían y esperan una respuesta.
Usando la bufferherramienta más común en lugar decpipeTambién es posible .
(Créditos: Esto se basa en la receta de "doble tee" de Christophe Loor de la socatdocumentación)