docs: public <T> T sendMessage(Address dest, Buffer data, RequestOptions opts) throws Exception {
          if(dest == null)
              throw new IllegalArgumentException("message destination is null, cannot send message");
  
          if(opts == null) {
              log.warn("request options were null, using default of sync");
              opts=RequestOptions.SYNC();
          }
  
          // invoke an async RPC directly and return null, without creating a UnicastRequest instance
          if(opts.mode() == ResponseMode.GET_NONE) {
              rpc_stats.add(RpcStats.Type.UNICAST, dest, false, 0);
              corr.sendUnicastRequest(dest, data, null, opts);
              return null;
          }
  
          // now it must be a sync RPC
          UnicastRequest<T> req=new UnicastRequest<>(corr, dest, opts);
          long start=!rpc_stats.extendedStats()? 0 : System.nanoTime();
          try {
              return req.execute(data, true);
          }
          finally {
              long time=!rpc_stats.extendedStats()? 0 : System.nanoTime() - start;
              rpc_stats.add(RpcStats.Type.UNICAST, dest, true, time);
          }
      }