--- a/src/java.base/unix/native/libnio/ch/SocketDispatcher.c Sat Mar 16 21:00:45 2019 +0000
+++ b/src/java.base/unix/native/libnio/ch/SocketDispatcher.c Mon Mar 18 19:59:05 2019 +0000
@@ -24,6 +24,7 @@
*/
#include <sys/types.h>
+ #include <sys/uio.h>
#include <unistd.h>
#include "jni.h"
@@ -47,3 +48,18 @@
return convertReturnVal(env, n, JNI_TRUE);
}
}
+
+ JNIEXPORT jlong JNICALL
+ Java_sun_nio_ch_SocketDispatcher_readv0(JNIEnv *env, jclass clazz,
+ jobject fdo, jlong address, jint len)
+ {
+ jint fd = fdval(env, fdo);
+ struct iovec *iov = (struct iovec *)jlong_to_ptr(address);
+ jlong n = readv(fd, iov, len);
+ if ((n == -1) && (errno == ECONNRESET || errno == EPIPE)) {
+ JNU_ThrowByName(env, "sun/net/ConnectionResetException", "Connection reset");
+ return IOS_THROWN;
+ } else {
+ return convertLongReturnVal(env, n, JNI_TRUE);
+ }
+ }