protected int doSend()

in gflog-core/src/main/java/com/epam/deltix/gflog/core/appender/TcpAppender.java [181:225]


    protected int doSend(final boolean force) {
        int bytesSent = 0;

        try {
            final int size = offset;

            byteBuffer.position(0);
            byteBuffer.limit(size);

            bytesSent = channel.write(byteBuffer);

            if (bytesSent < size && force) {
                final long deadline = System.currentTimeMillis() + sendTimeout;

                do {
                    if (System.currentTimeMillis() >= deadline) {
                        throw new IOException("Send timeout expired: " + sendTimeout);
                    }

                    final int sent = channel.write(byteBuffer);
                    bytesSent += sent;

                    if (sent == 0) {
                        LockSupport.parkNanos(1_000_000);
                    }
                } while (bytesSent < size);
            }

            if (bytesSent > 0) {
                final int remaining = size - bytesSent;

                if (remaining > 0) {
                    buffer.putBytes(0, buffer, bytesSent, remaining);
                }

                offset = remaining;
            }
        } catch (final Throwable e) {
            offset = 0;
            disconnect();
            LogDebug.warn("can't send messages to: " + host + ":" + port + ". Error: " + e.getMessage());
        }

        return bytesSent;
    }