< prev index next >

src/java.base/windows/native/libnet/SocketInputStream.c

Print this page
rev 53271 : 8216981: Per thread IO statistics in JFR


 102                 if (bufP != BUF) {
 103                     free(bufP);
 104                 }
 105                 return -1;
 106             }
 107 
 108             /*check if the socket has been closed while we were in timeout*/
 109             newfd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
 110             if (newfd == -1) {
 111                 JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
 112                 if (bufP != BUF) {
 113                     free(bufP);
 114                 }
 115                 return -1;
 116             }
 117         }
 118     }
 119 
 120     nread = recv(fd, bufP, len, 0);
 121     if (nread > 0) {

 122         (*env)->SetByteArrayRegion(env, data, off, nread, (jbyte *)bufP);
 123     } else {
 124         if (nread < 0) {
 125             int err = WSAGetLastError();
 126             // Check if the socket has been closed since we last checked.
 127             // This could be a reason for recv failing.
 128             if ((*env)->GetIntField(env, fdObj, IO_fd_fdID) == -1) {
 129                 JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
 130             } else {
 131                 switch (err) {
 132                     case WSAEINTR:
 133                         JNU_ThrowByName(env, "java/net/SocketException",
 134                             "socket closed");
 135                         break;
 136 
 137                     case WSAECONNRESET:
 138                     case WSAESHUTDOWN:
 139                         /*
 140                          * Connection has been reset - Windows sometimes reports
 141                          * the reset as a shutdown error.




 102                 if (bufP != BUF) {
 103                     free(bufP);
 104                 }
 105                 return -1;
 106             }
 107 
 108             /*check if the socket has been closed while we were in timeout*/
 109             newfd = (*env)->GetIntField(env, fdObj, IO_fd_fdID);
 110             if (newfd == -1) {
 111                 JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
 112                 if (bufP != BUF) {
 113                     free(bufP);
 114                 }
 115                 return -1;
 116             }
 117         }
 118     }
 119 
 120     nread = recv(fd, bufP, len, 0);
 121     if (nread > 0) {
 122         JVM_callNetworkReadBytes(env, nread);
 123         (*env)->SetByteArrayRegion(env, data, off, nread, (jbyte *)bufP);
 124     } else {
 125         if (nread < 0) {
 126             int err = WSAGetLastError();
 127             // Check if the socket has been closed since we last checked.
 128             // This could be a reason for recv failing.
 129             if ((*env)->GetIntField(env, fdObj, IO_fd_fdID) == -1) {
 130                 JNU_ThrowByName(env, "java/net/SocketException", "Socket closed");
 131             } else {
 132                 switch (err) {
 133                     case WSAEINTR:
 134                         JNU_ThrowByName(env, "java/net/SocketException",
 135                             "socket closed");
 136                         break;
 137 
 138                     case WSAECONNRESET:
 139                     case WSAESHUTDOWN:
 140                         /*
 141                          * Connection has been reset - Windows sometimes reports
 142                          * the reset as a shutdown error.


< prev index next >