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

Print this page




  81  * Class:     java_net_DualStackPlainSocketImpl
  82  * Method:    bind0
  83  * Signature: (ILjava/net/InetAddress;I)V
  84  */
  85 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_bind0
  86   (JNIEnv *env, jclass clazz, jint fd, jobject iaObj, jint port,
  87    jboolean exclBind)
  88 {
  89     SOCKETADDRESS sa;
  90     int rv;
  91     int sa_len = sizeof(sa);
  92 
  93     if (NET_InetAddressToSockaddr(env, iaObj, port, (struct sockaddr *)&sa,
  94                                  &sa_len, JNI_TRUE) != 0) {
  95       return;
  96     }
  97 
  98     rv = NET_WinBind(fd, (struct sockaddr *)&sa, sa_len, exclBind);
  99 
 100     if (rv == SOCKET_ERROR)
 101         NET_ThrowNew(env, WSAGetLastError(), "JVM_Bind");
 102 }
 103 
 104 /*
 105  * Class:     java_net_DualStackPlainSocketImpl
 106  * Method:    connect0
 107  * Signature: (ILjava/net/InetAddress;I)I
 108  */
 109 JNIEXPORT jint JNICALL Java_java_net_DualStackPlainSocketImpl_connect0
 110   (JNIEnv *env, jclass clazz, jint fd, jobject iaObj, jint port) {
 111     SOCKETADDRESS sa;
 112     int rv;
 113     int sa_len = sizeof(sa);
 114 
 115     if (NET_InetAddressToSockaddr(env, iaObj, port, (struct sockaddr *)&sa,
 116                                  &sa_len, JNI_TRUE) != 0) {
 117       return -1;
 118     }
 119 
 120     rv = connect(fd, (struct sockaddr *)&sa, sa_len);
 121     if (rv == SOCKET_ERROR) {


 434     }
 435 
 436     if (opt == java_net_SocketOptions_SO_LINGER)
 437         return linger.l_onoff ? linger.l_linger : -1;
 438     else
 439         return result;
 440 }
 441 
 442 
 443 /*
 444  * Class:     java_net_DualStackPlainSocketImpl
 445  * Method:    sendOOB
 446  * Signature: (II)V
 447  */
 448 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_sendOOB
 449   (JNIEnv *env, jclass clazz, jint fd, jint data) {
 450     jint n;
 451     unsigned char d = (unsigned char) data & 0xff;
 452 
 453     n = send(fd, (char *)&data, 1, MSG_OOB);
 454     if (n == JVM_IO_ERR) {
 455         NET_ThrowNew(env, WSAGetLastError(), "send");
 456     } else if (n == JVM_IO_INTR) {
 457         JNU_ThrowByName(env, "java/io/InterruptedIOException", 0);
 458     }
 459 }
 460 
 461 /*
 462  * Class:     java_net_DualStackPlainSocketImpl
 463  * Method:    configureBlocking
 464  * Signature: (IZ)V
 465  */
 466 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_configureBlocking
 467   (JNIEnv *env, jclass clazz, jint fd, jboolean blocking) {
 468     u_long arg;
 469     int result;
 470 
 471     if (blocking == JNI_TRUE) {
 472         arg = SET_BLOCKING;    // 0
 473     } else {
 474         arg = SET_NONBLOCKING;   // 1
 475     }
 476 
 477     result = ioctlsocket(fd, FIONBIO, &arg);


  81  * Class:     java_net_DualStackPlainSocketImpl
  82  * Method:    bind0
  83  * Signature: (ILjava/net/InetAddress;I)V
  84  */
  85 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_bind0
  86   (JNIEnv *env, jclass clazz, jint fd, jobject iaObj, jint port,
  87    jboolean exclBind)
  88 {
  89     SOCKETADDRESS sa;
  90     int rv;
  91     int sa_len = sizeof(sa);
  92 
  93     if (NET_InetAddressToSockaddr(env, iaObj, port, (struct sockaddr *)&sa,
  94                                  &sa_len, JNI_TRUE) != 0) {
  95       return;
  96     }
  97 
  98     rv = NET_WinBind(fd, (struct sockaddr *)&sa, sa_len, exclBind);
  99 
 100     if (rv == SOCKET_ERROR)
 101         NET_ThrowNew(env, WSAGetLastError(), "NET_Bind");
 102 }
 103 
 104 /*
 105  * Class:     java_net_DualStackPlainSocketImpl
 106  * Method:    connect0
 107  * Signature: (ILjava/net/InetAddress;I)I
 108  */
 109 JNIEXPORT jint JNICALL Java_java_net_DualStackPlainSocketImpl_connect0
 110   (JNIEnv *env, jclass clazz, jint fd, jobject iaObj, jint port) {
 111     SOCKETADDRESS sa;
 112     int rv;
 113     int sa_len = sizeof(sa);
 114 
 115     if (NET_InetAddressToSockaddr(env, iaObj, port, (struct sockaddr *)&sa,
 116                                  &sa_len, JNI_TRUE) != 0) {
 117       return -1;
 118     }
 119 
 120     rv = connect(fd, (struct sockaddr *)&sa, sa_len);
 121     if (rv == SOCKET_ERROR) {


 434     }
 435 
 436     if (opt == java_net_SocketOptions_SO_LINGER)
 437         return linger.l_onoff ? linger.l_linger : -1;
 438     else
 439         return result;
 440 }
 441 
 442 
 443 /*
 444  * Class:     java_net_DualStackPlainSocketImpl
 445  * Method:    sendOOB
 446  * Signature: (II)V
 447  */
 448 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_sendOOB
 449   (JNIEnv *env, jclass clazz, jint fd, jint data) {
 450     jint n;
 451     unsigned char d = (unsigned char) data & 0xff;
 452 
 453     n = send(fd, (char *)&data, 1, MSG_OOB);
 454     if (n == SOCKET_ERROR) {
 455         NET_ThrowNew(env, WSAGetLastError(), "send");


 456     }
 457 }
 458 
 459 /*
 460  * Class:     java_net_DualStackPlainSocketImpl
 461  * Method:    configureBlocking
 462  * Signature: (IZ)V
 463  */
 464 JNIEXPORT void JNICALL Java_java_net_DualStackPlainSocketImpl_configureBlocking
 465   (JNIEnv *env, jclass clazz, jint fd, jboolean blocking) {
 466     u_long arg;
 467     int result;
 468 
 469     if (blocking == JNI_TRUE) {
 470         arg = SET_BLOCKING;    // 0
 471     } else {
 472         arg = SET_NONBLOCKING;   // 1
 473     }
 474 
 475     result = ioctlsocket(fd, FIONBIO, &arg);