src/windows/native/java/net/TwoStacksPlainSocketImpl.c

Print this page

        

@@ -120,10 +120,12 @@
     psi_serverSocketID = (*env)->GetFieldID(env, cls, "serverSocket",
                                             "Ljava/net/ServerSocket;");
     CHECK_NULL(psi_serverSocketID);
     IO_fd_fdID = NET_GetFileDescriptorID(env);
     CHECK_NULL(IO_fd_fdID);
+
+    init(env);
 }
 
 /*
  * Class:     java_net_TwoStacksPlainSocketImpl
  * Method:    socketCreate

@@ -140,11 +142,11 @@
     if (IS_NULL(fdObj)) {
         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",
                         "null fd object");
         return;
     }
-    fd = socket(AF_INET, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
+    fd = (int)socket(AF_INET, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
     if (fd == -1) {
         NET_ThrowCurrent(env, "create");
         return;
     } else {
         /* Set socket attribute so it is not passed to any child process */

@@ -159,11 +161,11 @@
                             "null fd1 object");
             (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1);
             NET_SocketClose(fd);
             return;
         }
-        fd1 = socket(AF_INET6, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
+        fd1 = (int)socket(AF_INET6, (stream ? SOCK_STREAM: SOCK_DGRAM), 0);
         if (fd1 == -1) {
             NET_ThrowCurrent(env, "create");
             (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1);
             NET_SocketClose(fd);
             return;

@@ -447,21 +449,21 @@
         v6bind.ipv6_fd = fd1;
         rv = NET_BindV6(&v6bind);
         if (rv != -1) {
             /* check if the fds have changed */
             if (v6bind.ipv4_fd != fd) {
-                fd = v6bind.ipv4_fd;
+                fd = (int)v6bind.ipv4_fd;
                 if (fd == -1) {
                     /* socket is closed. */
                     (*env)->SetObjectField(env, this, psi_fdID, NULL);
                 } else {
                     /* socket was re-created */
                     (*env)->SetIntField(env, fdObj, IO_fd_fdID, fd);
                 }
             }
             if (v6bind.ipv6_fd != fd1) {
-                fd1 = v6bind.ipv6_fd;
+                fd1 = (int)v6bind.ipv6_fd;
                 if (fd1 == -1) {
                     /* socket is closed. */
                     (*env)->SetObjectField(env, this, psi_fd1ID, NULL);
                 } else {
                     /* socket was re-created */

@@ -581,14 +583,10 @@
     jobject fd1Obj = (*env)->GetObjectField(env, this, psi_fd1ID);
 
     /* the FileDescriptor field on socket */
     jobject socketFdObj;
 
-    /* cache the Inet4/6Address classes */
-    static jclass inet4Cls;
-    static jclass inet6Cls;
-
     /* the InetAddress field on socket */
     jobject socketAddressObj;
 
     /* the fd int field on fdObj */
     jint fd=-1, fd1=-1;

@@ -682,11 +680,11 @@
                                 "operation interrupted");
                 return;
             }
         }
     }
-    fd = accept(fd, (struct sockaddr *)&him, &len);
+    fd = (jint)accept(fd, (struct sockaddr *)&him, &len);
     if (fd < 0) {
         /* REMIND: SOCKET CLOSED PROBLEM */
         if (fd == -2) {
             JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
                             "operation interrupted");

@@ -697,26 +695,15 @@
         return;
     }
     (*env)->SetIntField(env, socketFdObj, IO_fd_fdID, fd);
 
     if (him.him.sa_family == AF_INET) {
-        if (inet4Cls == NULL) {
-            jclass c = (*env)->FindClass(env, "java/net/Inet4Address");
-            if (c != NULL) {
-                inet4Cls = (*env)->NewGlobalRef(env, c);
-                (*env)->DeleteLocalRef(env, c);
-            }
-        }
-
         /*
          * fill up the remote peer port and address in the new socket structure
          */
-        if (inet4Cls != NULL) {
-            socketAddressObj = (*env)->NewObject(env, inet4Cls, ia4_ctrID);
-        } else {
-            socketAddressObj = NULL;
-        }
+        socketAddressObj = (*env)->NewObject(env, ia4_class, ia4_ctrID);
+
         if (socketAddressObj == NULL) {
             /*
              * FindClass or NewObject failed so close connection and
              * exist (there will be a pending exception).
              */

@@ -729,23 +716,12 @@
         (*env)->SetIntField(env, socketAddressObj, ia_familyID, IPv4);
         (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj);
     } else {
         jbyteArray addr;
         /* AF_INET6 -> Inet6Address */
-        if (inet6Cls == 0) {
-            jclass c = (*env)->FindClass(env, "java/net/Inet6Address");
-            if (c != NULL) {
-                inet6Cls = (*env)->NewGlobalRef(env, c);
-                (*env)->DeleteLocalRef(env, c);
-            }
-        }
+        socketAddressObj = (*env)->NewObject(env, ia6_class, ia6_ctrID);
 
-        if (inet6Cls != NULL) {
-            socketAddressObj = (*env)->NewObject(env, inet6Cls, ia6_ctrID);
-        } else {
-            socketAddressObj = NULL;
-        }
         if (socketAddressObj == NULL) {
             /*
              * FindClass or NewObject failed so close connection and
              * exist (there will be a pending exception).
              */

@@ -1146,11 +1122,11 @@
 Java_java_net_TwoStacksPlainSocketImpl_socketSendUrgentData(JNIEnv *env, jobject this,
                                              jint data) {
     /* The fd field */
     jobject fdObj = (*env)->GetObjectField(env, this, psi_fdID);
     int n, fd;
-    unsigned char d = data & 0xff;
+    unsigned char d = (unsigned char)data & 0xff;
 
     if (IS_NULL(fdObj)) {
         JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
         return;
     } else {