< prev index next >

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

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


 155                      0,
 156                      &sa.sa,
 157                      &sa_len);
 158 
 159         if (n == SOCKET_ERROR) {
 160             int theErr = (jint)WSAGetLastError();
 161             if (theErr == WSAEMSGSIZE) {
 162                 /* Spec says the rest of the data will be discarded... */
 163                 n = len;
 164             } else if (theErr == WSAECONNRESET) {
 165                 purgeOutstandingICMP(env, this, fd);
 166                 if (connected == JNI_FALSE) {
 167                     retry = TRUE;
 168                 } else {
 169                     JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", 0);
 170                     return IOS_THROWN;
 171                 }
 172             } else if (theErr == WSAEWOULDBLOCK) {
 173                 return IOS_UNAVAILABLE;
 174             } else return handleSocketError(env, theErr);


 175         }
 176     } while (retry);
 177 
 178     /*
 179      * If the source address and port match the cached address
 180      * and port in DatagramChannelImpl then we don't need to
 181      * create InetAddress and InetSocketAddress objects.
 182      */
 183     senderAddr = (*env)->GetObjectField(env, this, dci_senderAddrID);
 184     if (senderAddr != NULL) {
 185         if (!NET_SockaddrEqualsInetAddress(env, &sa, senderAddr)) {
 186             senderAddr = NULL;
 187         } else {
 188             jint port = (*env)->GetIntField(env, this, dci_senderPortID);
 189             if (port != NET_GetPortFromSockaddr(&sa)) {
 190                 senderAddr = NULL;
 191             }
 192         }
 193     }
 194     if (senderAddr == NULL) {


 217 {
 218     jint fd = fdval(env, fdo);
 219     void *buf = (void *)jlong_to_ptr(address);
 220     SOCKETADDRESS sa;
 221     int sa_len = 0;
 222     jint rv = 0;
 223 
 224     if (NET_InetAddressToSockaddr(env, destAddress, destPort, &sa,
 225                                   &sa_len, preferIPv6) != 0) {
 226       return IOS_THROWN;
 227     }
 228 
 229     rv = sendto((SOCKET)fd, buf, len, 0, &sa.sa, sa_len);
 230     if (rv == SOCKET_ERROR) {
 231         int theErr = (jint)WSAGetLastError();
 232         if (theErr == WSAEWOULDBLOCK) {
 233             return IOS_UNAVAILABLE;
 234         }
 235         return handleSocketError(env, (jint)WSAGetLastError());
 236     }





 237     return rv;
 238 }


 155                      0,
 156                      &sa.sa,
 157                      &sa_len);
 158 
 159         if (n == SOCKET_ERROR) {
 160             int theErr = (jint)WSAGetLastError();
 161             if (theErr == WSAEMSGSIZE) {
 162                 /* Spec says the rest of the data will be discarded... */
 163                 n = len;
 164             } else if (theErr == WSAECONNRESET) {
 165                 purgeOutstandingICMP(env, this, fd);
 166                 if (connected == JNI_FALSE) {
 167                     retry = TRUE;
 168                 } else {
 169                     JNU_ThrowByName(env, JNU_JAVANETPKG "PortUnreachableException", 0);
 170                     return IOS_THROWN;
 171                 }
 172             } else if (theErr == WSAEWOULDBLOCK) {
 173                 return IOS_UNAVAILABLE;
 174             } else return handleSocketError(env, theErr);
 175         } else if (n > 0) {
 176           JVM_callNetworkReadBytes(env, n);
 177         }
 178     } while (retry);
 179 
 180     /*
 181      * If the source address and port match the cached address
 182      * and port in DatagramChannelImpl then we don't need to
 183      * create InetAddress and InetSocketAddress objects.
 184      */
 185     senderAddr = (*env)->GetObjectField(env, this, dci_senderAddrID);
 186     if (senderAddr != NULL) {
 187         if (!NET_SockaddrEqualsInetAddress(env, &sa, senderAddr)) {
 188             senderAddr = NULL;
 189         } else {
 190             jint port = (*env)->GetIntField(env, this, dci_senderPortID);
 191             if (port != NET_GetPortFromSockaddr(&sa)) {
 192                 senderAddr = NULL;
 193             }
 194         }
 195     }
 196     if (senderAddr == NULL) {


 219 {
 220     jint fd = fdval(env, fdo);
 221     void *buf = (void *)jlong_to_ptr(address);
 222     SOCKETADDRESS sa;
 223     int sa_len = 0;
 224     jint rv = 0;
 225 
 226     if (NET_InetAddressToSockaddr(env, destAddress, destPort, &sa,
 227                                   &sa_len, preferIPv6) != 0) {
 228       return IOS_THROWN;
 229     }
 230 
 231     rv = sendto((SOCKET)fd, buf, len, 0, &sa.sa, sa_len);
 232     if (rv == SOCKET_ERROR) {
 233         int theErr = (jint)WSAGetLastError();
 234         if (theErr == WSAEWOULDBLOCK) {
 235             return IOS_UNAVAILABLE;
 236         }
 237         return handleSocketError(env, (jint)WSAGetLastError());
 238     }
 239 
 240     if (rv > 0) {
 241       JVM_callFileWriteBytes(env, rv);
 242     }
 243 
 244     return rv;
 245 }
< prev index next >