/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.service.http.api.tcp;
/**
* Common TCP configuration that applies for both client and server sockets.
*
* @since 4.0
*/
public interface TcpSocketProperties {
/**
* The size of the buffer (in bytes) used when sending data, set on the socket itself.
*/
Integer getSendBufferSize();
/**
* The size of the buffer (in bytes) used when receiving data, set on the socket itself.
*/
Integer getReceiveBufferSize();
/**
* This sets the SO_TIMEOUT value on client sockets. Reading from the socket will block for up to this long (in milliseconds)
* before the read fails.
* <p>
* A value of 0 (the socket's default) causes the read to wait indefinitely (if no data arrives).
*/
Integer getClientTimeout();
/**
* If set, transmitted data is not collected together for greater efficiency but sent immediately.
* <p>
* Defaults to {@code true} even though Socket default is false because optimizing to reduce amount of network traffic over
* latency is hardly ever a concern today.
*/
Boolean getSendTcpNoDelay();
/**
* This sets the SO_LINGER value. This is related to how long (in milliseconds) the socket will take to close so that any
* remaining data is transmitted correctly. Enabling this option with a non-zero Integer <I>clientSocketTimeout</I> means that a
* <B>close()</B> will block pending the transmission and acknowledgement of all data written to the peer, at which point the
* socket is closed <I>gracefully</I>. Upon reaching the linger clientSocketTimeout, the socket is closed <I>forcefully</I>,
* with a TCP RST. Enabling the option with a clientSocketTimeout of zero does a forceful close immediately. If the specified
* clientSocketTimeout value exceeds 65,535 it will be reduced to 65,535.
* <p>
* A value of {@code null} (default) disables linger on the socket.
*/
Integer getLinger();
/**
* Enables SO_KEEPALIVE behavior on open sockets. This automatically checks socket connections that are open but unused for long
* periods and closes them if the connection becomes unavailable.
* <p>
* This is a property on the socket itself and is used by a server socket to control whether connections to the server are kept
* alive before they are recycled.
*/
Boolean getKeepAlive();
}