docs: function Listener() {
  		// setup abstract layer
  		core.ListenerAbstract.apply(this, arguments);
  
  		// parse the argument
  		if (!(this.object instanceof net.Server)) {
  
  			// create a new TCP server
  			if (typeof this.object === 'number' || typeof this.object === 'string') {
  				this.object = net.createServer().listen(this.object);
  			} else {
  				this.object = net.createServer().listen(this.object.port, this.object.host);
  			}
  
  			this.object.on('listening', this.emit.bind(this, 'listening'));
  		} else {
  			this.emit('listening');
  		}
  
  		// relay errors
  		this.object.on('error', this.emit.bind(this, 'error'));
  
  		// relay the close event
  		this.object.on('close', this.emit.bind(this, 'close'));
  
  		var self = this;
  		// when a remote has connected to this server, this TCP event will emit
  		this.object.on('connection', function (socket) {
  
  			// we will emit the connection event to create a new communication object
  			// the socket argument set here will be this.object in the new communication object
  			self.emit('connection', socket);
  		});
  	}