src/jdk.net/linux/native/libextnet/LinuxSocketOptions.c
author ihse
Fri, 08 Jun 2018 18:11:32 +0200
changeset 50471 f0aeede1b855
parent 50303 7164c3bb55df
permissions -rw-r--r--
8204572: SetupJdkLibrary should setup SRC and -I flags automatically Reviewed-by: erikj
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
47733
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     1
/*
50471
f0aeede1b855 8204572: SetupJdkLibrary should setup SRC and -I flags automatically
ihse
parents: 50303
diff changeset
     2
 * Copyright (c) 2017, 2018, Oracle and/or its affiliates. All rights reserved.
47733
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     4
 *
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     7
 * published by the Free Software Foundation.  Oracle designates this
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     8
 * particular file as subject to the "Classpath" exception as provided
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
     9
 * by Oracle in the LICENSE file that accompanied this code.
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    10
 *
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    11
 * This code is distributed in the hope that it will be useful, but WITHOUT
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    12
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    13
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    14
 * version 2 for more details (a copy is included in the LICENSE file that
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    15
 * accompanied this code).
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    16
 *
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    17
 * You should have received a copy of the GNU General Public License version
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    18
 * 2 along with this work; if not, write to the Free Software Foundation,
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    19
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    20
 *
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    21
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    22
 * or visit www.oracle.com if you need additional information or have any
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    23
 * questions.
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    24
 */
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    25
#include <sys/socket.h>
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    26
#include <string.h>
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    27
#include <errno.h>
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    28
#include <unistd.h>
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    29
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    30
#include <jni.h>
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    31
#include <netinet/tcp.h>
50303
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
    32
#include <netinet/in.h>
47733
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    33
#include "jni_util.h"
50471
f0aeede1b855 8204572: SetupJdkLibrary should setup SRC and -I flags automatically
ihse
parents: 50303
diff changeset
    34
#include "jdk_net_LinuxSocketOptions.h"
47733
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    35
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    36
/*
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    37
 * Class:     jdk_net_LinuxSocketOptions
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    38
 * Method:    setQuickAck
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    39
 * Signature: (II)V
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    40
 */
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    41
JNIEXPORT void JNICALL Java_jdk_net_LinuxSocketOptions_setQuickAck0
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    42
(JNIEnv *env, jobject unused, jint fd, jboolean on) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    43
    int optval;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    44
    int rv;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    45
    optval = (on ? 1 : 0);
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    46
    rv = setsockopt(fd, SOL_SOCKET, TCP_QUICKACK, &optval, sizeof (optval));
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    47
    if (rv < 0) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    48
        if (errno == ENOPROTOOPT) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    49
            JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    50
                            "unsupported socket option");
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    51
        } else {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    52
            JNU_ThrowByNameWithLastError(env, "java/net/SocketException",
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    53
                                        "set option TCP_QUICKACK failed");
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    54
        }
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    55
    }
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    56
}
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    57
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    58
/*
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    59
 * Class:     jdk_net_LinuxSocketOptions
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    60
 * Method:    getQuickAck
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    61
 * Signature: (I)Z;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    62
 */
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    63
JNIEXPORT jboolean JNICALL Java_jdk_net_LinuxSocketOptions_getQuickAck0
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    64
(JNIEnv *env, jobject unused, jint fd) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    65
    int on;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    66
    socklen_t sz = sizeof (on);
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    67
    int rv = getsockopt(fd, SOL_SOCKET, TCP_QUICKACK, &on, &sz);
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    68
    if (rv < 0) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    69
        if (errno == ENOPROTOOPT) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    70
            JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    71
                            "unsupported socket option");
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    72
        } else {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    73
            JNU_ThrowByNameWithLastError(env, "java/net/SocketException",
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    74
                                        "get option TCP_QUICKACK failed");
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    75
        }
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    76
    }
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    77
    return on != 0;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    78
}
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    79
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    80
/*
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    81
 * Class:     jdk_net_LinuxSocketOptions
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    82
 * Method:    quickAckSupported
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    83
 * Signature: ()Z
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    84
 */
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    85
JNIEXPORT jboolean JNICALL Java_jdk_net_LinuxSocketOptions_quickAckSupported0
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    86
(JNIEnv *env, jobject unused) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    87
    int one = 1;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    88
    int rv, s;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    89
    s = socket(PF_INET, SOCK_STREAM, 0);
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    90
    if (s < 0) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    91
        return JNI_FALSE;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    92
    }
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    93
    rv = setsockopt(s, SOL_SOCKET, TCP_QUICKACK, (void *) &one, sizeof (one));
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    94
    if (rv != 0 && errno == ENOPROTOOPT) {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    95
        rv = JNI_FALSE;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    96
    } else {
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    97
        rv = JNI_TRUE;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    98
    }
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
    99
    close(s);
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
   100
    return rv;
fbfe06b70e16 8145635: Add TCP_QUICKACK socket option
vtewari
parents:
diff changeset
   101
}
50303
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   102
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   103
static jint socketOptionSupported(jint sockopt) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   104
    jint one = 1;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   105
    jint rv, s;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   106
    s = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   107
    if (s < 0) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   108
        return 0;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   109
    }
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   110
    rv = setsockopt(s, SOL_TCP, sockopt, (void *) &one, sizeof (one));
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   111
    if (rv != 0 && errno == ENOPROTOOPT) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   112
        rv = 0;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   113
    } else {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   114
        rv = 1;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   115
    }
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   116
    close(s);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   117
    return rv;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   118
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   119
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   120
static void handleError(JNIEnv *env, jint rv, const char *errmsg) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   121
    if (rv < 0) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   122
        if (errno == ENOPROTOOPT) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   123
            JNU_ThrowByName(env, "java/lang/UnsupportedOperationException",
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   124
                    "unsupported socket option");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   125
        } else {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   126
            JNU_ThrowByNameWithLastError(env, "java/net/SocketException", errmsg);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   127
        }
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   128
    }
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   129
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   130
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   131
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   132
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   133
 * Method:    keepAliveOptionsSupported0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   134
 * Signature: ()Z
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   135
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   136
JNIEXPORT jboolean JNICALL Java_jdk_net_LinuxSocketOptions_keepAliveOptionsSupported0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   137
(JNIEnv *env, jobject unused) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   138
    return socketOptionSupported(TCP_KEEPIDLE) && socketOptionSupported(TCP_KEEPCNT)
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   139
            && socketOptionSupported(TCP_KEEPINTVL);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   140
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   141
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   142
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   143
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   144
 * Method:    setTcpkeepAliveProbes0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   145
 * Signature: (II)V
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   146
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   147
JNIEXPORT void JNICALL Java_jdk_net_LinuxSocketOptions_setTcpkeepAliveProbes0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   148
(JNIEnv *env, jobject unused, jint fd, jint optval) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   149
    jint rv = setsockopt(fd, SOL_TCP, TCP_KEEPCNT, &optval, sizeof (optval));
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   150
    handleError(env, rv, "set option TCP_KEEPCNT failed");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   151
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   152
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   153
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   154
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   155
 * Method:    setTcpKeepAliveTime0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   156
 * Signature: (II)V
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   157
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   158
JNIEXPORT void JNICALL Java_jdk_net_LinuxSocketOptions_setTcpKeepAliveTime0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   159
(JNIEnv *env, jobject unused, jint fd, jint optval) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   160
    jint rv = setsockopt(fd, SOL_TCP, TCP_KEEPIDLE, &optval, sizeof (optval));
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   161
    handleError(env, rv, "set option TCP_KEEPIDLE failed");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   162
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   163
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   164
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   165
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   166
 * Method:    setTcpKeepAliveIntvl0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   167
 * Signature: (II)V
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   168
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   169
JNIEXPORT void JNICALL Java_jdk_net_LinuxSocketOptions_setTcpKeepAliveIntvl0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   170
(JNIEnv *env, jobject unused, jint fd, jint optval) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   171
    jint rv = setsockopt(fd, SOL_TCP, TCP_KEEPINTVL, &optval, sizeof (optval));
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   172
    handleError(env, rv, "set option TCP_KEEPINTVL failed");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   173
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   174
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   175
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   176
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   177
 * Method:    getTcpkeepAliveProbes0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   178
 * Signature: (I)I;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   179
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   180
JNIEXPORT jint JNICALL Java_jdk_net_LinuxSocketOptions_getTcpkeepAliveProbes0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   181
(JNIEnv *env, jobject unused, jint fd) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   182
    jint optval, rv;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   183
    socklen_t sz = sizeof (optval);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   184
    rv = getsockopt(fd, SOL_TCP, TCP_KEEPCNT, &optval, &sz);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   185
    handleError(env, rv, "get option TCP_KEEPCNT failed");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   186
    return optval;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   187
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   188
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   189
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   190
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   191
 * Method:    getTcpKeepAliveTime0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   192
 * Signature: (I)I;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   193
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   194
JNIEXPORT jint JNICALL Java_jdk_net_LinuxSocketOptions_getTcpKeepAliveTime0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   195
(JNIEnv *env, jobject unused, jint fd) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   196
    jint optval, rv;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   197
    socklen_t sz = sizeof (optval);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   198
    rv = getsockopt(fd, SOL_TCP, TCP_KEEPIDLE, &optval, &sz);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   199
    handleError(env, rv, "get option TCP_KEEPIDLE failed");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   200
    return optval;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   201
}
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   202
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   203
/*
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   204
 * Class:     jdk_net_LinuxSocketOptions
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   205
 * Method:    getTcpKeepAliveIntvl0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   206
 * Signature: (I)I;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   207
 */
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   208
JNIEXPORT jint JNICALL Java_jdk_net_LinuxSocketOptions_getTcpKeepAliveIntvl0
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   209
(JNIEnv *env, jobject unused, jint fd) {
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   210
    jint optval, rv;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   211
    socklen_t sz = sizeof (optval);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   212
    rv = getsockopt(fd, SOL_TCP, TCP_KEEPINTVL, &optval, &sz);
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   213
    handleError(env, rv, "get option TCP_KEEPINTVL failed");
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   214
    return optval;
7164c3bb55df 8194298: Add support for per Socket configuration of TCP keepalive
vtewari
parents: 47733
diff changeset
   215
}