src/solaris/native/java/net/SocketInputStream.c

Print this page




  88      */
  89     if (len > MAX_BUFFER_LEN) {
  90         if (len > MAX_HEAP_BUFFER_LEN) {
  91             len = MAX_HEAP_BUFFER_LEN;
  92         }
  93         bufP = (char *)malloc((size_t)len);
  94         if (bufP == NULL) {
  95             bufP = BUF;
  96             len = MAX_BUFFER_LEN;
  97         }
  98     } else {
  99         bufP = BUF;
 100     }
 101 
 102     if (timeout) {
 103         nread = NET_Timeout(fd, timeout);
 104         if (nread <= 0) {
 105             if (nread == 0) {
 106                 JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
 107                             "Read timed out");
 108             } else if (nread == JVM_IO_ERR) {
 109                 if (errno == EBADF) {
 110                      JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
 111                  } else {
 112                      NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
 113                                                   "select/poll failed");
 114                  }
 115             } else if (nread == JVM_IO_INTR) {
 116                 JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
 117                             "Operation interrupted");
 118             }
 119             if (bufP != BUF) {
 120                 free(bufP);
 121             }
 122             return -1;
 123         }
 124     }
 125 
 126     nread = NET_Read(fd, bufP, len);
 127 
 128     if (nread <= 0) {
 129         if (nread < 0) {
 130 
 131             switch (errno) {
 132                 case ECONNRESET:
 133                 case EPIPE:
 134                     JNU_ThrowByName(env, "sun/net/ConnectionResetException",
 135                         "Connection reset");
 136                     break;
 137 




  88      */
  89     if (len > MAX_BUFFER_LEN) {
  90         if (len > MAX_HEAP_BUFFER_LEN) {
  91             len = MAX_HEAP_BUFFER_LEN;
  92         }
  93         bufP = (char *)malloc((size_t)len);
  94         if (bufP == NULL) {
  95             bufP = BUF;
  96             len = MAX_BUFFER_LEN;
  97         }
  98     } else {
  99         bufP = BUF;
 100     }
 101 
 102     if (timeout) {
 103         nread = NET_Timeout(fd, timeout);
 104         if (nread <= 0) {
 105             if (nread == 0) {
 106                 JNU_ThrowByName(env, JNU_JAVANETPKG "SocketTimeoutException",
 107                             "Read timed out");
 108             } else if (nread == -1) {
 109                 if (errno == EBADF) {
 110                      JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Socket closed");
 111                  } else {
 112                      NET_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
 113                                                   "select/poll failed");
 114                  }



 115             }
 116             if (bufP != BUF) {
 117                 free(bufP);
 118             }
 119             return -1;
 120         }
 121     }
 122 
 123     nread = NET_Read(fd, bufP, len);
 124 
 125     if (nread <= 0) {
 126         if (nread < 0) {
 127 
 128             switch (errno) {
 129                 case ECONNRESET:
 130                 case EPIPE:
 131                     JNU_ThrowByName(env, "sun/net/ConnectionResetException",
 132                         "Connection reset");
 133                     break;
 134