code: function onFree() {
      // create and socket.emit('free') logic
      // https://github.com/nodejs/node/blob/master/lib/_http_agent.js#L311
      // no req on the socket, it should be the new socket
      if (!socket._httpMessage && socket[SOCKET_REQUEST_COUNT] === 1) return;
  
      socket[SOCKET_REQUEST_FINISHED_COUNT]++;
      agent.requestCount++;
      debug('%s(requests: %s, finished: %s) free',
        socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT]);
  
      // should reuse on pedding requests?
      const name = agent.getName(options);
      if (socket.writable && agent.requests[name] && agent.requests[name].length) {
        // will be reuse on agent free listener
        socket[SOCKET_REQUEST_COUNT]++;
        debug('%s(requests: %s, finished: %s) will be reuse on agent free event',
          socket[SOCKET_NAME], socket[SOCKET_REQUEST_COUNT], socket[SOCKET_REQUEST_FINISHED_COUNT]);
      }
    }
docs: listener socket events: close, timeout, error, free