code: public synchronized void start() {
          if (running) {
              return;
          }
  
          LOGGER.info("{}: starting network client", self.getId());
  
          checkNotNull(server);
          checkNotNull(client);
  
          // IMPORTANT: set running _early, up here_
          // this is because the bind() and connect()
          // calls below will not succeed if their
          // callbacks see "running" as false
          running = true;
  
          SocketAddress bindAddress = getResolvedBindAddress();
          serverChannel = server.bind(bindAddress);
  
          for (RaftMember server : cluster.values()) {
              connect(server);
          }
      }
docs: Start the {@code RaftNetworkClient}.
  <p/>
  Following a call to {@code start()} the network threads
  will begin to do work. This means that the server component
  will accept and service incoming connections. Likewise, the
  the client component will attempt to establish outgoing
  connections to other Raft servers. As a result the caller
  no longer has exclusive access to underlying system resources.
  <p/>
  Once a successful call to {@code start()} is made subsequent calls are noops.