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 {