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
|