@Override synchronized public void send(NodeInfo destination, byte[] payload) throws InterruptedException { report(logLabel, () -> "send to "+destination.getNumber()+", isActive: "+socketListenThread.isActive.get(), VerboseLevel.DETAILED); if (!socketListenThread.isActive.get()) return; Session session = getOrCreateSession(destination); if (session.state.get() == Session.STATE_HANDSHAKE) { session.addPayloadToOutputQueue(destination, payload); } else { if (session.retransmitMap.size() > MAX_RETRANSMIT_QUEUE_SIZE) session.addPayloadToOutputQueue(destination, payload); else sendPayload(session, payload); } }