RFR:8194298 Add support for per Socket configuration of TCP keepalive

Chris Hegarty chris.hegarty at oracle.com
Wed Apr 18 14:14:31 UTC 2018


Vyom,

On 13/04/18 10:50, vyom tewari wrote:
> Hi All,
> 
> Please review the below code.
> 
> BugId    : https://bugs.openjdk.java.net/browse/JDK-8194298
> 
> webrev : http://cr.openjdk.java.net/~vtewari/8194298/webrev0.0/index.html

Here is some proposed wording for the JDK-specific extended socket
options specification.

1) Uses a consistent style across all three new options,
    and is in line with existing extended options.
2) Renamed the options slightly, to improve readability
    ( they don't need to conform to the native option names )
3) Reordered them so the build up is more logical
4) Removed inheritance from server sockets
5) Added standard verbiage about being "platform and
    system dependent
6) Added typical values. I think this is useful, as it
    gives an idea to the developer, but maybe it could be
    misleading. Can be dropped if there are concerns.

Can you please confirm that this is accurate, and also
will leave enough "wriggle" room when additional platform
support is added.

---

     /**
      * Keep-Alive idle time.
      *
      * <p> When the {@link java.net.StandardSocketOptions#SO_KEEPALIVE
      * SO_KEEPALIVE} option is enabled, TCP probes a connection that 
has been
      * idle for some amount of time. The default value for this idle 
period is
      * system dependent, but is typically 2 hours. The {@code TCP_KEEPIDLE}
      * option can be used to affect this value for a given socket.
      *
      * <p> The value of this socket option is an {@code Integer} that 
is the
      * number of seconds of idle time before keep-alive initiates a 
probe. The
      * socket option is specific to stream-oriented sockets using the 
TCP/IP
      * protocol. The exact semantics of this socket option are socket 
type and
      * system dependent.
      *
      *  @since 11
      */
     public static final SocketOption<Integer> TCP_KEEPIDLE
             = new ExtSocketOption<Integer>("TCP_KEEPIDLE", Integer.class);

     /**
      * Keep-Alive retransmission interval time.
      *
      * <p> When the {@link java.net.StandardSocketOptions#SO_KEEPALIVE
      * SO_KEEPALIVE} option is enabled, TCP probes a connection that 
has been
      * idle for some amount of time. If the remote system does not 
respond to a
      * keep-alive probe, TCP retransmits the probe after some amount of 
time.
      * The default value for this retransmition interval is system 
dependent,
      * but is typically 75 seconds. The {@code TCP_KEEPINTERVAL} option 
can be
      * used to affect this value for a given socket.
      *
      * <p> The value of this socket option is an {@code Integer} that 
is the
      * number of seconds to wait before retransmitting a keep-alive 
probe. The
      * socket option is specific to stream-oriented sockets using the 
TCP/IP
      * protocol. The exact semantics of this socket option are socket 
type and
      * system dependent.
      *
      * @since 11
      */
     public static final SocketOption<Integer> TCP_KEEPINTERVAL
             = new ExtSocketOption<Integer>("TCP_KEEPINTERVAL", 
Integer.class);

     /**
      * Keep-Alive retransmission maximum limit.
      *
      * <p> When the {@link java.net.StandardSocketOptions#SO_KEEPALIVE
      * SO_KEEPALIVE} option is enabled, TCP probes a connection that 
has been
      * idle for some amount of time. If the remote system does not 
respond to a
      * keep-alive probe, TCP retransmits the probe a certain number of 
times
      * before a connection is considered to be broken. The default 
value for
      * this keep-alive probe retransmit limit is system dependent, but is
      * typically 8. The {@code TCP_KEEPCOUNT} option can be used to affect
      * this value for a given socket.
      *
      * <p> The value of this socket option is an {@code Integer} that 
is the
      * maximum number of keep-alive probes to be sent. The socket option is
      * specific to stream-oriented sockets using the TCP/IP protocol. 
The exact
      * semantics of this socket option are socket type and system 
dependent.
      *
      * @since 11
      */
     public static final SocketOption<Integer> TCP_KEEPCOUNT
             = new ExtSocketOption<Integer>("TCP_KEEPCOUNT", Integer.class);

-Chris.


More information about the net-dev mailing list