jdk/src/java.base/windows/native/libnio/ch/Net.c
changeset 43100 a7e3457672c7
parent 36115 0676e37a0b9c
child 44208 c5f0f55bfc59
equal deleted inserted replaced
43099:47f8baf1fcbd 43100:a7e3457672c7
   166 Java_sun_nio_ch_Net_bind0(JNIEnv *env, jclass clazz, jobject fdo, jboolean preferIPv6,
   166 Java_sun_nio_ch_Net_bind0(JNIEnv *env, jclass clazz, jobject fdo, jboolean preferIPv6,
   167                           jboolean isExclBind, jobject iao, jint port)
   167                           jboolean isExclBind, jobject iao, jint port)
   168 {
   168 {
   169     SOCKETADDRESS sa;
   169     SOCKETADDRESS sa;
   170     int rv;
   170     int rv;
   171     int sa_len;
   171     int sa_len = 0;
   172 
   172 
   173     if (NET_InetAddressToSockaddr(env, iao, port, (struct sockaddr *)&sa, &sa_len, preferIPv6) != 0) {
   173     if (NET_InetAddressToSockaddr(env, iao, port, &sa, &sa_len, preferIPv6) != 0) {
   174       return;
   174         return;
   175     }
   175     }
   176 
   176 
   177     rv = NET_WinBind(fdval(env, fdo), (struct sockaddr *)&sa, sa_len, isExclBind);
   177     rv = NET_WinBind(fdval(env, fdo), &sa, sa_len, isExclBind);
   178     if (rv == SOCKET_ERROR)
   178     if (rv == SOCKET_ERROR)
   179         NET_ThrowNew(env, WSAGetLastError(), "bind");
   179         NET_ThrowNew(env, WSAGetLastError(), "bind");
   180 }
   180 }
   181 
   181 
   182 JNIEXPORT void JNICALL
   182 JNIEXPORT void JNICALL
   192 Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6, jobject fdo,
   192 Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6, jobject fdo,
   193                              jobject iao, jint port)
   193                              jobject iao, jint port)
   194 {
   194 {
   195     SOCKETADDRESS sa;
   195     SOCKETADDRESS sa;
   196     int rv;
   196     int rv;
   197     int sa_len;
   197     int sa_len = 0;
   198     SOCKET s = (SOCKET)fdval(env, fdo);
   198     SOCKET s = (SOCKET)fdval(env, fdo);
   199 
   199 
   200     if (NET_InetAddressToSockaddr(env, iao, port, (struct sockaddr *)&sa, &sa_len, preferIPv6) != 0) {
   200     if (NET_InetAddressToSockaddr(env, iao, port, &sa, &sa_len, preferIPv6) != 0) {
   201         return IOS_THROWN;
   201         return IOS_THROWN;
   202     }
   202     }
   203 
   203 
   204     rv = connect(s, (struct sockaddr *)&sa, sa_len);
   204     rv = connect(s, &sa.sa, sa_len);
   205     if (rv != 0) {
   205     if (rv != 0) {
   206         int err = WSAGetLastError();
   206         int err = WSAGetLastError();
   207         if (err == WSAEINPROGRESS || err == WSAEWOULDBLOCK) {
   207         if (err == WSAEINPROGRESS || err == WSAEWOULDBLOCK) {
   208             return IOS_UNAVAILABLE;
   208             return IOS_UNAVAILABLE;
   209         }
   209         }
   224 Java_sun_nio_ch_Net_localPort(JNIEnv *env, jclass clazz, jobject fdo)
   224 Java_sun_nio_ch_Net_localPort(JNIEnv *env, jclass clazz, jobject fdo)
   225 {
   225 {
   226     SOCKETADDRESS sa;
   226     SOCKETADDRESS sa;
   227     int sa_len = sizeof(sa);
   227     int sa_len = sizeof(sa);
   228 
   228 
   229     if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
   229     if (getsockname(fdval(env, fdo), &sa.sa, &sa_len) < 0) {
   230         int error = WSAGetLastError();
   230         int error = WSAGetLastError();
   231         if (error == WSAEINVAL) {
   231         if (error == WSAEINVAL) {
   232             return 0;
   232             return 0;
   233         }
   233         }
   234         NET_ThrowNew(env, error, "getsockname");
   234         NET_ThrowNew(env, error, "getsockname");
   235         return IOS_THROWN;
   235         return IOS_THROWN;
   236     }
   236     }
   237     return NET_GetPortFromSockaddr((struct sockaddr *)&sa);
   237     return NET_GetPortFromSockaddr(&sa);
   238 }
   238 }
   239 
   239 
   240 JNIEXPORT jobject JNICALL
   240 JNIEXPORT jobject JNICALL
   241 Java_sun_nio_ch_Net_localInetAddress(JNIEnv *env, jclass clazz, jobject fdo)
   241 Java_sun_nio_ch_Net_localInetAddress(JNIEnv *env, jclass clazz, jobject fdo)
   242 {
   242 {
   243     SOCKETADDRESS sa;
   243     SOCKETADDRESS sa;
   244     int sa_len = sizeof(sa);
   244     int sa_len = sizeof(sa);
   245     int port;
   245     int port;
   246 
   246 
   247     if (getsockname(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
   247     if (getsockname(fdval(env, fdo), &sa.sa, &sa_len) < 0) {
   248         NET_ThrowNew(env, WSAGetLastError(), "getsockname");
   248         NET_ThrowNew(env, WSAGetLastError(), "getsockname");
   249         return NULL;
   249         return NULL;
   250     }
   250     }
   251     return NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port);
   251     return NET_SockaddrToInetAddress(env, &sa, &port);
   252 }
   252 }
   253 
   253 
   254 JNIEXPORT jint JNICALL
   254 JNIEXPORT jint JNICALL
   255 Java_sun_nio_ch_Net_remotePort(JNIEnv *env, jclass clazz, jobject fdo)
   255 Java_sun_nio_ch_Net_remotePort(JNIEnv *env, jclass clazz, jobject fdo)
   256 {
   256 {
   257     SOCKETADDRESS sa;
   257     SOCKETADDRESS sa;
   258     int sa_len = sizeof(sa);
   258     int sa_len = sizeof(sa);
   259 
   259 
   260     if (getpeername(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
   260     if (getpeername(fdval(env, fdo), &sa.sa, &sa_len) < 0) {
   261         int error = WSAGetLastError();
   261         int error = WSAGetLastError();
   262         if (error == WSAEINVAL) {
   262         if (error == WSAEINVAL) {
   263             return 0;
   263             return 0;
   264         }
   264         }
   265         NET_ThrowNew(env, error, "getsockname");
   265         NET_ThrowNew(env, error, "getsockname");
   266         return IOS_THROWN;
   266         return IOS_THROWN;
   267     }
   267     }
   268     return NET_GetPortFromSockaddr((struct sockaddr *)&sa);
   268     return NET_GetPortFromSockaddr(&sa);
   269 }
   269 }
   270 
   270 
   271 JNIEXPORT jobject JNICALL
   271 JNIEXPORT jobject JNICALL
   272 Java_sun_nio_ch_Net_remoteInetAddress(JNIEnv *env, jclass clazz, jobject fdo)
   272 Java_sun_nio_ch_Net_remoteInetAddress(JNIEnv *env, jclass clazz, jobject fdo)
   273 {
   273 {
   274     SOCKETADDRESS sa;
   274     SOCKETADDRESS sa;
   275     int sa_len = sizeof(sa);
   275     int sa_len = sizeof(sa);
   276     int port;
   276     int port;
   277 
   277 
   278     if (getpeername(fdval(env, fdo), (struct sockaddr *)&sa, &sa_len) < 0) {
   278     if (getpeername(fdval(env, fdo), &sa.sa, &sa_len) < 0) {
   279         NET_ThrowNew(env, WSAGetLastError(), "getsockname");
   279         NET_ThrowNew(env, WSAGetLastError(), "getsockname");
   280         return NULL;
   280         return NULL;
   281     }
   281     }
   282     return NET_SockaddrToInetAddress(env, (struct sockaddr *)&sa, &port);
   282     return NET_SockaddrToInetAddress(env, &sa, &port);
   283 }
   283 }
   284 
   284 
   285 JNIEXPORT jint JNICALL
   285 JNIEXPORT jint JNICALL
   286 Java_sun_nio_ch_Net_getIntOption0(JNIEnv *env, jclass clazz, jobject fdo,
   286 Java_sun_nio_ch_Net_getIntOption0(JNIEnv *env, jclass clazz, jobject fdo,
   287                                   jboolean mayNeedConversion, jint level, jint opt)
   287                                   jboolean mayNeedConversion, jint level, jint opt)