Traceroute.prototype._run = function(target) { var self = this, args, child, lineEmitter, emitter, stderrBuffer; args = []; if (this._addressType === 'ipv4') { args.push('-4'); } else { args.push('-6'); } args.push('-n'); args.push('-m'); args.push(this._maxTtl); args.push('-w'); args.push(this._waitTime); args.push(target); args.push(this._packetLen); child = this._spawn('traceroute', args); lineEmitter = new LineEmitter(); emitter = new EventEmitter(); stderrBuffer = ''; lineEmitter.on('data', function(line) { line = line.replace(/^\s+|\s+$/g, ''); var hops = self._parseLine(line); if (!hops) { return; } hops.forEach(function(hop) { emitter.emit('hop', hop); }); }); child.stdout.on('data', function(chunk) { lineEmitter.write(chunk); }); child.stderr.on('data', function(chunk) { stderrBuffer += chunk; }); child.on('exit', function(code) { var err; if (code === 0) { process.nextTick(function() { emitter.emit('end'); }); } else { err = new Error('Error: ' + stderrBuffer); process.nextTick(function() { emitter.emit('error', err); }); } }); return emitter; };
child.stdout.on('data', function(chunk) { lineEmitter.write(chunk); });