Skip to content

Instantly share code, notes, and snippets.

@RJ
Created June 8, 2012 16:51
Show Gist options
  • Save RJ/2896831 to your computer and use it in GitHub Desktop.
Save RJ/2896831 to your computer and use it in GitHub Desktop.
Add lag in both directions to tcp connection
// Generic TCP proxy that adds delay on packets in both directions
var net = require('net'),
repl = require('repl'),
sys = require('sys');
var listenPort = 19999,
fwdPort = 9999;
var delayMs = 100;
var activeConns = 0;
var server;
function delay(d) {
if(!d && d!==0) {
console.log("Delay is: ",delayMs,"ms");
return;
}
delayMs = d;
console.log("Set delay to: ",delayMs,"ms");
}
var rpl = repl.start("slowproxy> ");
rpl.context.delay = delay;
server = net.createServer(function(listenSock) {
var fwdSock;
function closer() {
activeConns --;
fwdSock.end();
listenSock.end();
}
listenSock.on('connect', function() {
fwdSock = net.createConnection(fwdPort);
fwdSock.on('connect', function() {
activeConns ++;
console.log("Active connections: ",activeConns);
});
fwdSock.on('data', function(data) {
setTimeout(function() {
listenSock.write(data);
}, delayMs);
});
});
listenSock.on('data', function(data) {
setTimeout(function() {
try {
fwdSock.write(data);
} catch (e) {
closer();
}
}, delayMs);
});
listenSock.on('close', closer);
});
server.listen(listenPort);
console.log("Listening on ", listenPort, " ---> ", fwdPort, " [delay: ", delayMs,"ms]");
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment