docs: public static Socket fork(ZContext ctx, IAttachedRunnable runnable, Object... args)
      {
          Socket pipe = ctx.createSocket(SocketType.PAIR);
  
          if (pipe != null) {
              pipe.bind(String.format("inproc://zctx-pipe-%d", pipe.hashCode()));
          }
          else {
              return null;
          }
  
          //  Connect child pipe to our pipe
          ZContext ccontext = ZContext.shadow(ctx);
          Socket cpipe = ccontext.createSocket(SocketType.PAIR);
          if (cpipe == null) {
              return null;
          }
          cpipe.connect(String.format("inproc://zctx-pipe-%d", pipe.hashCode()));
  
          //  Prepare child thread
          Thread shim = new ShimThread(ccontext, runnable, args, cpipe);
          shim.start();
  
          return pipe;
      }