docs: function delayedSocket(fifoSocket){
  	var delayedSocketBase = {
  		__delayedSocket: true,
  		get connected () {
  			var realSocket = this.fifoSocket.realSocket;
  			return !!realSocket && realSocket.connected;
  		},
  		get disconnected () {
  			return !this.connected;
  		}
  	};
  
  	var methods = [
  		'on',
  		'off',
  		'once',
  		'emit',
  		'removeListener',
  		'addListener',
  		'open',
  		'connect',
  		'close',
  		'disconnect'
  	];
  
  	var delayedSocket = methods.reduce(function(acc, method){
  		acc[method] = function(){
  			var realSocket = fifoSocket.realSocket;
  			var fifo = fifoSocket.fifo;
  			var url = fifoSocket.url;
  			if (realSocket){
  				debug('delay-io("' + url + '"): realSocket ' + method);
  				if (!realSocket[method]){
  					console.warn('steal-socket.io: method ' + method + ' is undefined for realSocket');
  				} else {
  					realSocket[method].apply(realSocket, arguments);
  				}
  			} else {
  				debug('delay-io("' + url + '"): record ' + method + '("' + arguments[0] + '", ...)');
  				fifo.push([method, arguments]);
  			}
  		};
  		return acc;
  	}, delayedSocketBase);
  
  	delayedSocket.io = {
  		uri: fifoSocket.url,
  		engine: ['on', 'off'].reduce(function (acc, method) {
  			acc[method] = function (event, handler) {
  				if (fifoSocket.realSocket) {
  					return fifoSocket.realSocket.io.engine[method](event, handler);
  				}
  			};
  			return acc;
  		}, {})
  	};
  	delayedSocket.fifoSocket = fifoSocket;
  
  	return delayedSocket;
  }