code: def bind(self, *pos, **kw):
          
          proxy_type, proxy_addr, proxy_port, rdns, username, password = self.proxy
          if not proxy_type or self.type != socket.SOCK_DGRAM:
              return _orig_socket.bind(self, *pos, **kw)
  
          if self._proxyconn:
              raise socket.error(EINVAL, "Socket already bound to an address")
          if proxy_type != SOCKS5:
              msg = "UDP only supported by SOCKS5 proxy type"
              raise socket.error(EOPNOTSUPP, msg)
          super(socksocket, self).bind(*pos, **kw)
  
          # Need to specify actual local port because
          # some relays drop packets if a port of zero is specified.
          # Avoid specifying host address in case of NAT though.
          _, port = self.getsockname()
          dst = ("0", port)
  
          self._proxyconn = _orig_socket()
          proxy = self._proxy_addr()
          self._proxyconn.connect(proxy)
  
          UDP_ASSOCIATE = b"\x03"
          _, relay = self._SOCKS5_request(self._proxyconn, UDP_ASSOCIATE, dst)
  
          # The relay is most likely on the same host as the SOCKS proxy,
          # but some proxies return a private IP address (10.x.y.z)
          host, _ = proxy
          _, port = relay
          super(socksocket, self).connect((host, port))
          super(socksocket, self).settimeout(self._timeout)
          self.proxy_sockname = ("0.0.0.0", 0)
docs: Implements proxy connection for UDP sockets,
          which happens during the bind() phase.