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 } |