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

Print this page

        

*** 120,129 **** --- 120,131 ---- 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,150 **** if (IS_NULL(fdObj)) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "null fd object"); return; } ! fd = 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 */ --- 142,152 ---- if (IS_NULL(fdObj)) { JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "null fd object"); return; } ! 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,169 **** "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); if (fd1 == -1) { NET_ThrowCurrent(env, "create"); (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1); NET_SocketClose(fd); return; --- 161,171 ---- "null fd1 object"); (*env)->SetIntField(env, fdObj, IO_fd_fdID, -1); NET_SocketClose(fd); return; } ! 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,467 **** 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; 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; if (fd1 == -1) { /* socket is closed. */ (*env)->SetObjectField(env, this, psi_fd1ID, NULL); } else { /* socket was re-created */ --- 449,469 ---- v6bind.ipv6_fd = fd1; rv = NET_BindV6(&v6bind); if (rv != -1) { /* check if the fds have changed */ if (v6bind.ipv4_fd != 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 = (int)v6bind.ipv6_fd; if (fd1 == -1) { /* socket is closed. */ (*env)->SetObjectField(env, this, psi_fd1ID, NULL); } else { /* socket was re-created */
*** 581,594 **** 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; --- 583,592 ----
*** 682,692 **** "operation interrupted"); return; } } } ! fd = accept(fd, (struct sockaddr *)&him, &len); if (fd < 0) { /* REMIND: SOCKET CLOSED PROBLEM */ if (fd == -2) { JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException", "operation interrupted"); --- 680,690 ---- "operation interrupted"); return; } } } ! 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,722 **** 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; ! } if (socketAddressObj == NULL) { /* * FindClass or NewObject failed so close connection and * exist (there will be a pending exception). */ --- 695,709 ---- return; } (*env)->SetIntField(env, socketFdObj, IO_fd_fdID, fd); if (him.him.sa_family == AF_INET) { /* * fill up the remote peer port and address in the new socket structure */ ! 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,751 **** (*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); ! } ! } - 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). */ --- 716,727 ---- (*env)->SetIntField(env, socketAddressObj, ia_familyID, IPv4); (*env)->SetObjectField(env, socket, psi_addressID, socketAddressObj); } else { jbyteArray addr; /* AF_INET6 -> Inet6Address */ ! socketAddressObj = (*env)->NewObject(env, ia6_class, ia6_ctrID); if (socketAddressObj == NULL) { /* * FindClass or NewObject failed so close connection and * exist (there will be a pending exception). */
*** 1146,1156 **** 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; if (IS_NULL(fdObj)) { JNU_ThrowByName(env, "java/net/SocketException", "Socket closed"); return; } else { --- 1122,1132 ---- 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 = (unsigned char)data & 0xff; if (IS_NULL(fdObj)) { JNU_ThrowByName(env, "java/net/SocketException", "Socket closed"); return; } else {