src/java.base/unix/native/libnio/ch/SocketDispatcher.c
branchniosocketimpl-branch
changeset 57270 3519688a4e4d
parent 57186 997178749c87
child 57278 bf925a3ee68a
--- 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);
+     }
+ }