summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2006-01-12 11:56:07 +0000
committerMark Wielaard <mark@klomp.org>2006-01-12 11:56:07 +0000
commitd3e81786e764124c1fefb3842dc48a806accc297 (patch)
tree53424353a00c1a3117728525eccbf4d2552aad30
parent119217eccad563009f38a13ca4060ed08d07c40a (diff)
downloadclasspath-d3e81786e764124c1fefb3842dc48a806accc297.tar.gz
* vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java (receive):
Use packet.getLength(). * native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c (nativeReceive): Check whether the receiver wants zero bytes.
-rw-r--r--ChangeLog7
-rw-r--r--native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c6
-rw-r--r--vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java2
3 files changed, 14 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index aaad8ab4a..4a770380b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,12 @@
2006-01-12 Mark Wielaard <mark@klomp.org>
+ * vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java (receive):
+ Use packet.getLength().
+ * native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c
+ (nativeReceive): Check whether the receiver wants zero bytes.
+
+2006-01-12 Mark Wielaard <mark@klomp.org>
+
* native/jni/java-net/javanet.c (_javanet_recvfrom): Return -1 when
other side orderly closed connection.
* vm/reference/gnu/java/net/VMPlainSocketImpl.java
diff --git a/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c b/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c
index 6d6dace6f..1b3cb97e0 100644
--- a/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c
+++ b/native/jni/java-net/gnu_java_net_VMPlainDatagramSocketImpl.c
@@ -211,6 +211,12 @@ Java_gnu_java_net_VMPlainDatagramSocketImpl_nativeReceive(JNIEnv *env,
/* Receive the packet */
/* should we try some sort of validation on the length? */
(*bytes_read) = _javanet_recvfrom(env, obj, arr, offset, length, &addr, port);
+
+ /* Special case the strange situation where the receiver didn't want any
+ bytes. */
+ if (length == 0 && (*bytes_read) == -1)
+ *bytes_read = 0;
+
if ((*bytes_read) == -1)
{
(*env)->ReleaseIntArrayElements(env, receivedFromPort, (jint*)port, 0);
diff --git a/vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java b/vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java
index 1df675476..958c21874 100644
--- a/vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java
+++ b/vm/reference/gnu/java/net/VMPlainDatagramSocketImpl.java
@@ -155,7 +155,7 @@ public final class VMPlainDatagramSocketImpl
int[] receivedLength = new int[1];
nativeReceive(socket, packet.getData(), packet.getOffset(),
- packet.getData().length - packet.getOffset(),
+ packet.getLength(),
receiveFromAddress, receiveFromPort, receivedLength);
packet.setAddress(InetAddress.getByAddress(receiveFromAddress));