code: def host(self, hostname=None):
          
          if (hostname is None) or (hostname == self.__hostname):
              return self.__hostname
          # when hostname change ensure old socket is close
          self.close()
          # IPv4 ?
          try:
              socket.inet_pton(socket.AF_INET, hostname)
              self.__hostname = hostname
              return self.__hostname
          except socket.error:
              pass
          # IPv6 ?
          try:
              socket.inet_pton(socket.AF_INET6, hostname)
              self.__hostname = hostname
              return self.__hostname
          except socket.error:
              pass
          # DNS name ?
          if re.match('^[a-z][a-z0-9\.\-]+$', hostname):
              self.__hostname = hostname
              return self.__hostname
          else:
              return None
docs: Get or set host (IPv4/IPv6 or hostname like 'plc.domain.net')
  
          :param hostname: hostname or IPv4/IPv6 address or None for get value
          :type hostname: str or None
          :returns: hostname or None if set fail
          :rtype: str or None