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