docs: public boolean setAddress(final String addr)
      {
          //  Convert the textual address into address structure.
          address = new TcpAddress(addr, options.ipv6);
          endpoint = address.toString();
  
          //  Create a listening socket.
          try {
              if (options.selectorChooser == null) {
                  fd = ServerSocketChannel.open();
              }
              else {
                  fd = options.selectorChooser.choose(address, options).openServerSocketChannel();
              }
  
              // On some systems, IPv4 mapping in IPv6 sockets is disabled by default.
              // Switch it on in such cases.
              // The method enableIpv4Mapping is empty. Still to be written
              if (address.family() == StandardProtocolFamily.INET6) {
                  TcpUtils.enableIpv4Mapping(fd);
              }
  
              TcpUtils.unblockSocket(fd);
  
              //  Set the socket buffer limits for the underlying socket.
              if (options.sndbuf != 0) {
                  TcpUtils.setTcpSendBuffer(fd, options.sndbuf);
              }
              if (options.rcvbuf != 0) {
                  TcpUtils.setTcpReceiveBuffer(fd, options.rcvbuf);
              }
  
              if (!isWindows) {
                  TcpUtils.setReuseAddress(fd, true);
              }
  
              //  Bind the socket to the network interface and port.
              // NB: fd.socket().bind(...) for Android environments
              fd.socket().bind(address.address(), options.backlog);
              // find the address in case of wildcard
              endpoint = getAddress();
          }
          catch (IOException e) {
              close();
              errno.set(ZError.EADDRINUSE);
              return false;
          }
          socket.eventListening(endpoint, fd);
          return true;
      }