SUGGESTED FIX
*** src/solaris/native/java/net/PlainDatagramSocketImpl.c- Wed Apr 11 15:32:52 2007
--- src/solaris/native/java/net/PlainDatagramSocketImpl.c Mon Jun 11 12:10:13 2007
*** 1,9 ****
/*
! * @(#)PlainDatagramSocketImpl.c 1.94 05/05/26
*
! * Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
#include <errno.h>
#include <netinet/in.h>
--- 1,9 ----
/*
! * %W% %E%
*
! * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
*/
#include <errno.h>
#include <netinet/in.h>
*** 693,702 ****
--- 693,704 ----
int orig_errno = errno;
(void) recv(fd, fullPacket, 1, 0);
errno = orig_errno;
}
#endif
+ (*env)->SetIntField(env, packet, dp_offsetID, 0);
+ (*env)->SetIntField(env, packet, dp_lengthID, 0);
if (errno == ECONNREFUSED) {
JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException",
"ICMP Port Unreachable");
} else {
if (errno == EBADF) {
*** 703,719 ****
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
}
}
(*env)->SetIntField(env, packet, dp_offsetID, 0);
(*env)->SetIntField(env, packet, dp_lengthID, 0);
- } else if (n == JVM_IO_INTR) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
- (*env)->SetIntField(env, packet, dp_offsetID, 0);
- (*env)->SetIntField(env, packet, dp_lengthID, 0);
} else {
/*
* success - fill in received address...
*
* REMIND: Fill in an int on the packet, and create inetadd
--- 705,719 ----
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
}
}
+ } else if (n == JVM_IO_INTR) {
(*env)->SetIntField(env, packet, dp_offsetID, 0);
(*env)->SetIntField(env, packet, dp_lengthID, 0);
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
} else {
/*
* success - fill in received address...
*
* REMIND: Fill in an int on the packet, and create inetadd
*** 905,914 ****
--- 905,916 ----
/* truncate the data if the packet's length is too small */
if (n > packetBufferLen) {
n = packetBufferLen;
}
if (n == JVM_IO_ERR) {
+ (*env)->SetIntField(env, packet, dp_offsetID, 0);
+ (*env)->SetIntField(env, packet, dp_lengthID, 0);
if (errno == ECONNREFUSED) {
JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException",
"ICMP Port Unreachable");
} else {
if (errno == EBADF) {
*** 915,931 ****
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
}
}
(*env)->SetIntField(env, packet, dp_offsetID, 0);
(*env)->SetIntField(env, packet, dp_lengthID, 0);
- } else if (n == JVM_IO_INTR) {
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
- (*env)->SetIntField(env, packet, dp_offsetID, 0);
- (*env)->SetIntField(env, packet, dp_lengthID, 0);
} else {
int port;
jobject packetAddress;
/*
--- 917,931 ----
JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
} else {
NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException", "Receive failed");
}
}
+ } else if (n == JVM_IO_INTR) {
(*env)->SetIntField(env, packet, dp_offsetID, 0);
(*env)->SetIntField(env, packet, dp_lengthID, 0);
JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
"operation interrupted");
} else {
int port;
jobject packetAddress;
/*
|