public void requestSync(UnsafeSerializable data){
        if (!connected)
            return;
        try {
            pendingData.get(socket).offer(UnsafeSerializer.write(data));
            if (selectionOpts == SelectionKey.OP_WRITE){
                socket.register(selector, SelectionKey.OP_WRITE);
            }
            selector.wakeup();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        final String id = data.getObjectId();
        Object sync = new Object();
        if (debugEnabled) logger.debug("sent request for:" + id);
        long start = System.nanoTime();
        syncRequestQueue.put(id, sync);
        synchronized (sync){
            try {
                sync.wait(syncReqTMOUT);
                long stop = System.nanoTime();
                if (debugEnabled && (stop - start) <= syncReqTMOUT*1000000L) logger.debug("reply for:" + id + " came back in " + (stop-start) + "ns");
            } catch (InterruptedException e) {
                logger.error(e.getMessage(), e);
            }
        }
    }