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);
|