docs: async def _connect_one(self, remote_address):
          '''Connect to the proxy and perform a handshake requesting a connection.
  
          Return the open socket on success, or the exception on failure.
          '''
          loop = asyncio.get_event_loop()
  
          for info in await loop.getaddrinfo(str(self.address.host), self.address.port,
                                             type=socket.SOCK_STREAM):
              # This object has state so is only good for one connection
              client = self.protocol(remote_address, self.auth)
              sock = socket.socket(family=info[0])
              try:
                  # A non-blocking socket is required by loop socket methods
                  sock.setblocking(False)
                  await loop.sock_connect(sock, info[4])
                  await self._handshake(client, sock, loop)
                  self.peername = sock.getpeername()
                  return sock
              except (OSError, SOCKSProtocolError) as e:
                  exception = e
                  # Don't close the socket because of an asyncio bug
                  # see https://github.com/kyuupichan/aiorpcX/issues/8
          return exception