code: public ChannelFuture bindAsync(final SocketAddress localAddress) {
          if (localAddress == null) {
              throw new NullPointerException("localAddress");
          }
  
          ChannelPipeline pipeline;
          try {
              pipeline = getPipelineFactory().getPipeline();
          } catch (Exception e) {
              throw new ChannelPipelineException("Failed to initialize a pipeline.", e);
          }
  
          Channel ch = getFactory().newChannel(pipeline);
  
          // Apply options.
          boolean success = false;
          try {
              ch.getConfig().setOptions(getOptions());
              success = true;
          } finally {
              if (!success) {
                  ch.close();
              }
          }
  
          // Bind
          ChannelFuture future = ch.bind(localAddress);
  
          return future;
      }
docs: Creates a new channel which is bound to the specified local address.
  
  @return a new {@link ChannelFuture} which will be notified once the Channel is
  bound and accepts incoming connections
  
  @throws ChannelException
  if failed to create a new channel and
  bind it to the local address