public void asyncClose(final Socket socket, final String address, final Runnable runBeforeClose) {
    asyncClose(socket, address, runBeforeClose, () -> {
    });
  }
Closes the specified socket in a background thread. In some cases we see close hang.
Depending on how the SocketCloser is configured (see ASYNC_CLOSE_WAIT_MILLISECONDS)
this method may block for a certain amount of time. If it is called after the SocketCloser is
closed then a normal synchronous close is done.

@param socket the socket to close
@param address key used to determine which executor to use. Usually the address of a peer or
       client
@param runBeforeClose a Runnable with stuff to execute before the socket is closed
geode-core/src/main/java/org/apache/geode/internal/net/SocketCloser.java