code: def _connect(self):
          
          # we want to mimic what socket.create_connection does to support
          # ipv4/ipv6, but we want to set options prior to calling
          # socket.connect()
          err = None
          for res in socket.getaddrinfo(self.host, self.port, 0,
                                        socket.SOCK_STREAM):
              family, socktype, proto, canonname, socket_address = res
              sock = None
              try:
                  sock = socket.socket(family, socktype, proto)
                  # TCP_NODELAY
                  sock.setsockopt(socket.IPPROTO_TCP,socket.TCP_NODELAY, 1)
  
                  # TCP_KEEPALIVE
                  if self.socket_keepalive:
                      sock.setsockopt(socket.SOL_SOCKET,socket.SO_KEEPALIVE, 1)
                      for k, v in iteritems(self.socket_keepalive_options):
                          sock.setsockopt(socket.SOL_TCP, k, v)                
  
                  # set the socket_connect_timeout before we connect
                  sock.settimeout(self.socket_connect_timeout)
                  # connect
                  sock.connect(socket_address)
                  # set the socket_timeout now that we're connected
                  sock.settimeout(self.socket_timeout)
                  return sock                
  
              except socket.error as _:
                  err = _
                  if sock is not None:
                      sock.close()
          if err is not None:
              raise err
          raise socket.error("socket.getaddrinfo returned an empty list")
docs: Create a TCP socket connection