< prev index next >

src/java.base/unix/native/libnio/ch/DatagramChannelImpl.c

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


 142         retry = JNI_FALSE;
 143         n = recvfrom(fd, buf, len, 0, &sa.sa, &sa_len);
 144         if (n < 0) {
 145             if (errno == EAGAIN || errno == EWOULDBLOCK) {
 146                 return IOS_UNAVAILABLE;
 147             }
 148             if (errno == EINTR) {
 149                 return IOS_INTERRUPTED;
 150             }
 151             if (errno == ECONNREFUSED) {
 152                 if (connected == JNI_FALSE) {
 153                     retry = JNI_TRUE;
 154                 } else {
 155                     JNU_ThrowByName(env, JNU_JAVANETPKG
 156                                     "PortUnreachableException", 0);
 157                     return IOS_THROWN;
 158                 }
 159             } else {
 160                 return handleSocketError(env, errno);
 161             }


 162         }
 163     } while (retry == JNI_TRUE);
 164 
 165     /*
 166      * If the source address and port match the cached address
 167      * and port in DatagramChannelImpl then we don't need to
 168      * create InetAddress and InetSocketAddress objects.
 169      */
 170     senderAddr = (*env)->GetObjectField(env, this, dci_senderAddrID);
 171     if (senderAddr != NULL) {
 172         if (!NET_SockaddrEqualsInetAddress(env, &sa, senderAddr)) {
 173             senderAddr = NULL;
 174         } else {
 175             jint port = (*env)->GetIntField(env, this, dci_senderPortID);
 176             if (port != NET_GetPortFromSockaddr(&sa)) {
 177                 senderAddr = NULL;
 178             }
 179         }
 180     }
 181     if (senderAddr == NULL) {


 211     }
 212 
 213     if (NET_InetAddressToSockaddr(env, destAddress, destPort, &sa,
 214                                   &sa_len, preferIPv6) != 0) {
 215       return IOS_THROWN;
 216     }
 217 
 218     n = sendto(fd, buf, len, 0, &sa.sa, sa_len);
 219     if (n < 0) {
 220         if (errno == EAGAIN || errno == EWOULDBLOCK) {
 221             return IOS_UNAVAILABLE;
 222         }
 223         if (errno == EINTR) {
 224             return IOS_INTERRUPTED;
 225         }
 226         if (errno == ECONNREFUSED) {
 227             JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", 0);
 228             return IOS_THROWN;
 229         }
 230         return handleSocketError(env, errno);


 231     }
 232     return n;
 233 }


 142         retry = JNI_FALSE;
 143         n = recvfrom(fd, buf, len, 0, &sa.sa, &sa_len);
 144         if (n < 0) {
 145             if (errno == EAGAIN || errno == EWOULDBLOCK) {
 146                 return IOS_UNAVAILABLE;
 147             }
 148             if (errno == EINTR) {
 149                 return IOS_INTERRUPTED;
 150             }
 151             if (errno == ECONNREFUSED) {
 152                 if (connected == JNI_FALSE) {
 153                     retry = JNI_TRUE;
 154                 } else {
 155                     JNU_ThrowByName(env, JNU_JAVANETPKG
 156                                     "PortUnreachableException", 0);
 157                     return IOS_THROWN;
 158                 }
 159             } else {
 160                 return handleSocketError(env, errno);
 161             }
 162         } else if (n > 0) {
 163             JVM_callNetworkReadBytes(env, n);
 164         }
 165     } while (retry == JNI_TRUE);
 166 
 167     /*
 168      * If the source address and port match the cached address
 169      * and port in DatagramChannelImpl then we don't need to
 170      * create InetAddress and InetSocketAddress objects.
 171      */
 172     senderAddr = (*env)->GetObjectField(env, this, dci_senderAddrID);
 173     if (senderAddr != NULL) {
 174         if (!NET_SockaddrEqualsInetAddress(env, &sa, senderAddr)) {
 175             senderAddr = NULL;
 176         } else {
 177             jint port = (*env)->GetIntField(env, this, dci_senderPortID);
 178             if (port != NET_GetPortFromSockaddr(&sa)) {
 179                 senderAddr = NULL;
 180             }
 181         }
 182     }
 183     if (senderAddr == NULL) {


 213     }
 214 
 215     if (NET_InetAddressToSockaddr(env, destAddress, destPort, &sa,
 216                                   &sa_len, preferIPv6) != 0) {
 217       return IOS_THROWN;
 218     }
 219 
 220     n = sendto(fd, buf, len, 0, &sa.sa, sa_len);
 221     if (n < 0) {
 222         if (errno == EAGAIN || errno == EWOULDBLOCK) {
 223             return IOS_UNAVAILABLE;
 224         }
 225         if (errno == EINTR) {
 226             return IOS_INTERRUPTED;
 227         }
 228         if (errno == ECONNREFUSED) {
 229             JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", 0);
 230             return IOS_THROWN;
 231         }
 232         return handleSocketError(env, errno);
 233     } else if (n > 0) {
 234       JVM_callNetworkWriteBytes(env, n);
 235     }
 236     return n;
 237 }
< prev index next >