summaryrefslogtreecommitdiff
path: root/native/jni/java-net
diff options
context:
space:
mode:
authorBrian Jones <cbj@gnu.org>2003-01-30 13:19:45 +0000
committerBrian Jones <cbj@gnu.org>2003-01-30 13:19:45 +0000
commit92fbbdf31d88c0c6bf3024a6649be2d0e17a50f7 (patch)
treec310951197ea0dee1461de9aa5db503146be7157 /native/jni/java-net
parentf4a3fd8a65ebe7203c703a2a788341a0bae6b24d (diff)
downloadclasspath-92fbbdf31d88c0c6bf3024a6649be2d0e17a50f7.tar.gz
* java/net/SocketImpl.java (localport): set to -1 by default
* native/jni/java-net/javanet.h (SOCKOPT_SO_KEEPALIVE): new #define * native/jni/java-net/javanet.c (_javanet_set_option): case SO_KEEPALIVE (_javanet_get_option): case SO_KEEPALIVE
Diffstat (limited to 'native/jni/java-net')
-rw-r--r--native/jni/java-net/javanet.c31
-rw-r--r--native/jni/java-net/javanet.h1
2 files changed, 32 insertions, 0 deletions
diff --git a/native/jni/java-net/javanet.c b/native/jni/java-net/javanet.c
index 2db6eecbc..3ffe446a9 100644
--- a/native/jni/java-net/javanet.c
+++ b/native/jni/java-net/javanet.c
@@ -1024,6 +1024,21 @@ _javanet_set_option(JNIEnv *env, jobject this, jint option_id, jobject val)
sizeof(int));
break;
+ case SOCKOPT_SO_KEEPALIVE:
+ mid = (*env)->GetMethodID(env, cls, "booleanValue", "()Z");
+ if (mid == NULL)
+ { JCL_ThrowException(env, IO_EXCEPTION,
+ "Internal error: _javanet_set_option()"); return; }
+
+ /* Should be a 0 or a 1 */
+ optval = (*env)->CallBooleanMethod(env, val, mid);
+ if ((*env)->ExceptionOccurred(env))
+ return;
+
+ rc = setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&optval,
+ sizeof(int));
+ break;
+
default:
JCL_ThrowException(env, SOCKET_EXCEPTION, "Unrecognized option");
return;
@@ -1183,6 +1198,22 @@ _javanet_get_option(JNIEnv *env, jobject this, jint option_id)
break;
+ case SOCKOPT_SO_KEEPALIVE:
+ optlen = sizeof(int);
+ rc = getsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (void*)&optval, &optlen);
+ if (rc == -1)
+ {
+ JCL_ThrowException(env, SOCKET_EXCEPTION, strerror(errno));
+ return(0);
+ }
+
+ if (optval)
+ return(_javanet_create_boolean(env, JNI_TRUE));
+ else
+ return(_javanet_create_boolean(env, JNI_FALSE));
+
+ break;
+
default:
JCL_ThrowException(env, SOCKET_EXCEPTION, "No such option" );
return(0);
diff --git a/native/jni/java-net/javanet.h b/native/jni/java-net/javanet.h
index c0e295143..f27f811e2 100644
--- a/native/jni/java-net/javanet.h
+++ b/native/jni/java-net/javanet.h
@@ -63,6 +63,7 @@ exception statement from your version. */
#define SOCKOPT_SO_RCVBUF 4098
#define SOCKOPT_SO_REUSEADDR 4
#define SOCKOPT_IP_MULTICAST_IF 16
+#define SOCKOPT_SO_KEEPALIVE 8
/* Internal option identifiers. Not needed for JDK compatibility */
#define SOCKOPT_IP_TTL 7777