258 }
259
260 /* By default, Linux uses the route default */
261 if (domain == AF_INET6 && type == SOCK_DGRAM) {
262 int arg = 1;
263 if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &arg,
264 sizeof(arg)) < 0) {
265 JNU_ThrowByNameWithLastError(env,
266 JNU_JAVANETPKG "SocketException",
267 "Unable to set IPV6_MULTICAST_HOPS");
268 close(fd);
269 return -1;
270 }
271 }
272 #endif
273 return fd;
274 }
275
276 JNIEXPORT void JNICALL
277 Java_sun_nio_ch_Net_bind0(JNIEnv *env, jclass clazz, jobject fdo, jboolean preferIPv6,
278 jboolean useExclBind, jobject iao, int port)
279 {
280 SOCKETADDRESS sa;
281 int sa_len = 0;
282 int rv = 0;
283
284 if (NET_InetAddressToSockaddr(env, iao, port, &sa, &sa_len,
285 preferIPv6) != 0) {
286 return;
287 }
288
289 rv = NET_Bind(fdval(env, fdo), &sa, sa_len);
290 if (rv != 0) {
291 handleSocketError(env, errno);
292 }
293 }
294
295 JNIEXPORT void JNICALL
296 Java_sun_nio_ch_Net_listen(JNIEnv *env, jclass cl, jobject fdo, jint backlog)
297 {
298 if (listen(fdval(env, fdo), backlog) < 0)
299 handleSocketError(env, errno);
300 }
301
302 JNIEXPORT jint JNICALL
303 Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6,
304 jobject fdo, jobject iao, jint port)
305 {
306 SOCKETADDRESS sa;
|
258 }
259
260 /* By default, Linux uses the route default */
261 if (domain == AF_INET6 && type == SOCK_DGRAM) {
262 int arg = 1;
263 if (setsockopt(fd, IPPROTO_IPV6, IPV6_MULTICAST_HOPS, &arg,
264 sizeof(arg)) < 0) {
265 JNU_ThrowByNameWithLastError(env,
266 JNU_JAVANETPKG "SocketException",
267 "Unable to set IPV6_MULTICAST_HOPS");
268 close(fd);
269 return -1;
270 }
271 }
272 #endif
273 return fd;
274 }
275
276 JNIEXPORT void JNICALL
277 Java_sun_nio_ch_Net_bind0(JNIEnv *env, jclass clazz, jobject fdo, jboolean preferIPv6,
278 jboolean useExclBind, jobject iao, int port, int scopeId)
279 {
280 SOCKETADDRESS sa;
281 int sa_len = 0;
282 int rv = 0;
283
284 if (NET_InetAddressToSockaddr(env, iao, port, &sa, &sa_len,
285 preferIPv6) != 0) {
286 return;
287 }
288 if (scopeId != -1) { // use the explicit scopeId, if there is one
289 ((struct sockaddr_in6 *)&sa.sa)->sin6_scope_id = scopeId;
290 }
291
292 rv = NET_Bind(fdval(env, fdo), &sa, sa_len);
293 if (rv != 0) {
294 handleSocketError(env, errno);
295 }
296 }
297
298 JNIEXPORT void JNICALL
299 Java_sun_nio_ch_Net_listen(JNIEnv *env, jclass cl, jobject fdo, jint backlog)
300 {
301 if (listen(fdval(env, fdo), backlog) < 0)
302 handleSocketError(env, errno);
303 }
304
305 JNIEXPORT jint JNICALL
306 Java_sun_nio_ch_Net_connect0(JNIEnv *env, jclass clazz, jboolean preferIPv6,
307 jobject fdo, jobject iao, jint port)
308 {
309 SOCKETADDRESS sa;
|