src/windows/native/java/net/DualStackPlainDatagramSocketImpl.c

Print this page




 445         if (rv == JVM_IO_ERR) {
 446             NET_ThrowNew(env, WSAGetLastError(), "Datagram send failed");
 447         } else if (rv == JVM_IO_INTR) {
 448             JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
 449                             "operation interrupted");
 450         }
 451     }
 452 
 453     if (length > MAX_BUFFER_LEN) {
 454         free(fullPacket);
 455     }
 456 }
 457 
 458 /*
 459  * Class:     java_net_DualStackPlainDatagramSocketImpl
 460  * Method:    socketSetIntOption
 461  * Signature: (III)V
 462  */
 463 JNIEXPORT void JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketSetIntOption
 464   (JNIEnv *env, jclass clazz, jint fd , jint cmd, jint value) {
 465     int level, opt;
 466 
 467     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 468         JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
 469                                      "Invalid option");
 470         return;
 471     }
 472 
 473     if (NET_SetSockOpt(fd, level, opt, (char *)&value, sizeof(value)) < 0) {
 474         NET_ThrowNew(env, WSAGetLastError(), "setsockopt");
 475     }
 476 }
 477 
 478 /*
 479  * Class:     java_net_DualStackPlainDatagramSocketImpl
 480  * Method:    socketGetIntOption
 481  * Signature: (II)I
 482  */
 483 JNIEXPORT jint JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketGetIntOption
 484   (JNIEnv *env, jclass clazz, jint fd, jint cmd) {
 485     int level, opt, result=0;
 486     int result_len = sizeof(result);
 487 
 488     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 489         JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
 490                                      "Invalid option");
 491         return -1;
 492     }
 493 
 494     if (NET_GetSockOpt(fd, level, opt, (void *)&result, &result_len) < 0) {
 495         NET_ThrowNew(env, WSAGetLastError(), "getsockopt");
 496         return -1;
 497     }
 498 
 499     return result;
 500 }


 445         if (rv == JVM_IO_ERR) {
 446             NET_ThrowNew(env, WSAGetLastError(), "Datagram send failed");
 447         } else if (rv == JVM_IO_INTR) {
 448             JNU_ThrowByName(env, JNU_JAVAIOPKG "InterruptedIOException",
 449                             "operation interrupted");
 450         }
 451     }
 452 
 453     if (length > MAX_BUFFER_LEN) {
 454         free(fullPacket);
 455     }
 456 }
 457 
 458 /*
 459  * Class:     java_net_DualStackPlainDatagramSocketImpl
 460  * Method:    socketSetIntOption
 461  * Signature: (III)V
 462  */
 463 JNIEXPORT void JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketSetIntOption
 464   (JNIEnv *env, jclass clazz, jint fd , jint cmd, jint value) {
 465     int level = 0, opt = 0;
 466 
 467     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 468         JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
 469                                      "Invalid option");
 470         return;
 471     }
 472 
 473     if (NET_SetSockOpt(fd, level, opt, (char *)&value, sizeof(value)) < 0) {
 474         NET_ThrowNew(env, WSAGetLastError(), "setsockopt");
 475     }
 476 }
 477 
 478 /*
 479  * Class:     java_net_DualStackPlainDatagramSocketImpl
 480  * Method:    socketGetIntOption
 481  * Signature: (II)I
 482  */
 483 JNIEXPORT jint JNICALL Java_java_net_DualStackPlainDatagramSocketImpl_socketGetIntOption
 484   (JNIEnv *env, jclass clazz, jint fd, jint cmd) {
 485     int level = 0, opt = 0, result=0;
 486     int result_len = sizeof(result);
 487 
 488     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 489         JNU_ThrowByNameWithLastError(env, JNU_JAVANETPKG "SocketException",
 490                                      "Invalid option");
 491         return -1;
 492     }
 493 
 494     if (NET_GetSockOpt(fd, level, opt, (void *)&result, &result_len) < 0) {
 495         NET_ThrowNew(env, WSAGetLastError(), "getsockopt");
 496         return -1;
 497     }
 498 
 499     return result;
 500 }