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

Print this page




 350 
 351 /*
 352  * Class:     java_net_DualStackPlainSocketImpl
 353  * Method:    shutdown0
 354  * Signature: (II)V
 355  */
 356 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_shutdown0
 357   (JNIEnv *env, jclass clazz, jint fd, jint howto) {
 358     shutdown(fd, howto);
 359 }
 360 
 361 
 362 /*
 363  * Class:     java_net_DualStackPlainSocketImpl
 364  * Method:    setIntOption
 365  * Signature: (III)V
 366  */
 367 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_setIntOption
 368   (JNIEnv *env, jclass clazz, jint fd, jint cmd, jint value) {
 369 
 370     int level, opt;
 371     struct linger linger;
 372     char *parg;
 373     int arglen;
 374 
 375     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 376         JNU_ThrowByNameWithLastError(env,
 377                                      JNU_JAVANETPKG "SocketException",
 378                                      "Invalid option");
 379         return;
 380     }
 381 
 382     if (opt == java_net_SocketOptions_SO_LINGER) {
 383         parg = (char *)&linger;
 384         arglen = sizeof(linger);
 385         if (value >= 0) {
 386             linger.l_onoff = 1;
 387             linger.l_linger = (unsigned short)value;
 388         } else {
 389             linger.l_onoff = 0;
 390             linger.l_linger = 0;
 391         }
 392     } else {
 393         parg = (char *)&value;
 394         arglen = sizeof(value);
 395     }
 396 
 397     if (NET_SetSockOpt(fd, level, opt, parg, arglen) < 0) {
 398         NET_ThrowNew(env, WSAGetLastError(), "setsockopt");
 399     }
 400 }
 401 
 402 /*
 403  * Class:     java_net_DualStackPlainSocketImpl
 404  * Method:    getIntOption
 405  * Signature: (II)I
 406  */
 407 JNIEXPORT jint JNICALL Java_java_net_DualStackPlainSocketImpl_getIntOption
 408   (JNIEnv *env, jclass clazz, jint fd, jint cmd) {
 409 
 410     int level, opt;
 411     int result=0;
 412     struct linger linger;
 413     char *arg;
 414     int arglen;
 415 
 416     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 417         JNU_ThrowByNameWithLastError(env,
 418                                      JNU_JAVANETPKG "SocketException",
 419                                      "Unsupported socket option");
 420         return -1;
 421     }
 422 
 423     if (opt == java_net_SocketOptions_SO_LINGER) {
 424         arg = (char *)&linger;
 425         arglen = sizeof(linger);
 426     } else {
 427         arg = (char *)&result;
 428         arglen = sizeof(result);
 429     }
 430 
 431     if (NET_GetSockOpt(fd, level, opt, arg, &arglen) < 0) {
 432         NET_ThrowNew(env, WSAGetLastError(), "getsockopt");




 350 
 351 /*
 352  * Class:     java_net_DualStackPlainSocketImpl
 353  * Method:    shutdown0
 354  * Signature: (II)V
 355  */
 356 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_shutdown0
 357   (JNIEnv *env, jclass clazz, jint fd, jint howto) {
 358     shutdown(fd, howto);
 359 }
 360 
 361 
 362 /*
 363  * Class:     java_net_DualStackPlainSocketImpl
 364  * Method:    setIntOption
 365  * Signature: (III)V
 366  */
 367 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_setIntOption
 368   (JNIEnv *env, jclass clazz, jint fd, jint cmd, jint value) {
 369 
 370     int level = 0, opt = 0;
 371     struct linger linger = {0, 0};
 372     char *parg;
 373     int arglen;
 374 
 375     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 376         JNU_ThrowByNameWithLastError(env,
 377                                      JNU_JAVANETPKG "SocketException",
 378                                      "Invalid option");
 379         return;
 380     }
 381 
 382     if (opt == java_net_SocketOptions_SO_LINGER) {
 383         parg = (char *)&linger;
 384         arglen = sizeof(linger);
 385         if (value >= 0) {
 386             linger.l_onoff = 1;
 387             linger.l_linger = (unsigned short)value;
 388         } else {
 389             linger.l_onoff = 0;
 390             linger.l_linger = 0;
 391         }
 392     } else {
 393         parg = (char *)&value;
 394         arglen = sizeof(value);
 395     }
 396 
 397     if (NET_SetSockOpt(fd, level, opt, parg, arglen) < 0) {
 398         NET_ThrowNew(env, WSAGetLastError(), "setsockopt");
 399     }
 400 }
 401 
 402 /*
 403  * Class:     java_net_DualStackPlainSocketImpl
 404  * Method:    getIntOption
 405  * Signature: (II)I
 406  */
 407 JNIEXPORT jint JNICALL Java_java_net_DualStackPlainSocketImpl_getIntOption
 408   (JNIEnv *env, jclass clazz, jint fd, jint cmd) {
 409 
 410     int level = 0, opt = 0;
 411     int result=0;
 412     struct linger linger = {0, 0};
 413     char *arg;
 414     int arglen;
 415 
 416     if (NET_MapSocketOption(cmd, &level, &opt) < 0) {
 417         JNU_ThrowByNameWithLastError(env,
 418                                      JNU_JAVANETPKG "SocketException",
 419                                      "Unsupported socket option");
 420         return -1;
 421     }
 422 
 423     if (opt == java_net_SocketOptions_SO_LINGER) {
 424         arg = (char *)&linger;
 425         arglen = sizeof(linger);
 426     } else {
 427         arg = (char *)&result;
 428         arglen = sizeof(result);
 429     }
 430 
 431     if (NET_GetSockOpt(fd, level, opt, arg, &arglen) < 0) {
 432         NET_ThrowNew(env, WSAGetLastError(), "getsockopt");