8320168: handle setsocktopt return values
Reviewed-by: lucy, alanb, vtewari
This commit is contained in:
parent
6c5e15c1a2
commit
db1d82347b
@ -263,7 +263,11 @@ tcp_ping4(JNIEnv *env, SOCKETADDRESS *sa, SOCKETADDRESS *netif, jint timeout,
|
||||
|
||||
// set TTL
|
||||
if (ttl > 0) {
|
||||
setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
|
||||
if (setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)) < 0) {
|
||||
NET_ThrowNew(env, errno, "setsockopt IP_TTL failed");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// A network interface was specified, so let's bind to it.
|
||||
@ -349,11 +353,19 @@ ping4(JNIEnv *env, jint fd, SOCKETADDRESS *sa, SOCKETADDRESS *netif,
|
||||
struct timeval tv = { 0, 0 };
|
||||
const size_t plen = ICMP_MINLEN + sizeof(tv);
|
||||
|
||||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) < 0) {
|
||||
NET_ThrowNew(env, errno, "setsockopt SO_RCVBUF failed");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
// sets the ttl (max number of hops)
|
||||
if (ttl > 0) {
|
||||
setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl));
|
||||
if (setsockopt(fd, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)) < 0) {
|
||||
NET_ThrowNew(env, errno, "setsockopt IP_TTL failed");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// a specific interface was specified, so let's bind the socket
|
||||
|
@ -463,12 +463,16 @@ tcp_ping6(JNIEnv *env, SOCKETADDRESS *sa, SOCKETADDRESS *netif, jint timeout,
|
||||
|
||||
// set TTL
|
||||
if (ttl > 0) {
|
||||
setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl));
|
||||
if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl)) < 0) {
|
||||
NET_ThrowNew(env, errno, "setsockopt IPV6_UNICAST_HOPS failed");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// A network interface was specified, so let's bind to it.
|
||||
if (netif != NULL) {
|
||||
if (bind(fd, &netif->sa, sizeof(struct sockaddr_in6)) <0) {
|
||||
if (bind(fd, &netif->sa, sizeof(struct sockaddr_in6)) < 0) {
|
||||
NET_ThrowNew(env, errno, "Can't bind socket");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
@ -557,11 +561,19 @@ ping6(JNIEnv *env, jint fd, SOCKETADDRESS *sa, SOCKETADDRESS *netif,
|
||||
setsockopt(fd, SOL_RAW, IPV6_CHECKSUM, &csum_offset, sizeof(int));
|
||||
#endif
|
||||
|
||||
setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size));
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, &size, sizeof(size)) < 0) {
|
||||
NET_ThrowNew(env, errno, "setsockopt SO_RCVBUF failed");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
|
||||
// sets the ttl (max number of hops)
|
||||
if (ttl > 0) {
|
||||
setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl));
|
||||
if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, &ttl, sizeof(ttl)) < 0) {
|
||||
NET_ThrowNew(env, errno, "setsockopt IPV6_UNICAST_HOPS failed");
|
||||
close(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// a specific interface was specified, so let's bind the socket
|
||||
|
@ -536,7 +536,9 @@ NET_SetSockOpt(int fd, int level, int opt, const void *arg,
|
||||
}
|
||||
|
||||
if (sotype == SOCK_DGRAM) {
|
||||
setsockopt(fd, level, SO_REUSEPORT, arg, len);
|
||||
if (setsockopt(fd, level, SO_REUSEPORT, arg, len) < 0) {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
@ -232,7 +232,11 @@ tcp_ping4(JNIEnv *env, SOCKETADDRESS *sa, SOCKETADDRESS *netif, jint timeout,
|
||||
|
||||
// set TTL
|
||||
if (ttl > 0) {
|
||||
setsockopt(fd, IPPROTO_IP, IP_TTL, (const char *)&ttl, sizeof(ttl));
|
||||
if (setsockopt(fd, IPPROTO_IP, IP_TTL, (const char *)&ttl, sizeof(ttl)) == SOCKET_ERROR) {
|
||||
NET_ThrowNew(env, WSAGetLastError(), "setsockopt IP_TTL failed");
|
||||
closesocket(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// A network interface was specified, so let's bind to it.
|
||||
|
@ -310,7 +310,11 @@ tcp_ping6(JNIEnv *env, SOCKETADDRESS *sa, SOCKETADDRESS *netif, jint timeout,
|
||||
|
||||
// set TTL
|
||||
if (ttl > 0) {
|
||||
setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, (const char *)&ttl, sizeof(ttl));
|
||||
if (setsockopt(fd, IPPROTO_IPV6, IPV6_UNICAST_HOPS, (const char *)&ttl, sizeof(ttl)) == SOCKET_ERROR) {
|
||||
NET_ThrowNew(env, WSAGetLastError(), "setsockopt IPV6_UNICAST_HOPS failed");
|
||||
closesocket(fd);
|
||||
return JNI_FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
// A network interface was specified, so let's bind to it.
|
||||
|
@ -156,7 +156,7 @@ Java_sun_nio_ch_Net_socket0(JNIEnv *env, jclass cl, jboolean preferIPv6,
|
||||
if (s != INVALID_SOCKET) {
|
||||
SetHandleInformation((HANDLE)s, HANDLE_FLAG_INHERIT, 0);
|
||||
|
||||
/* IPV6_V6ONLY is true by default */
|
||||
/* Attempt to disable IPV6_V6ONLY to ensure dual-socket support; ignore errors */
|
||||
if (domain == AF_INET6) {
|
||||
int opt = 0;
|
||||
setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY,
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -131,7 +131,9 @@ Java_sun_nio_ch_WindowsAsynchronousServerSocketChannelImpl_updateAcceptContext(J
|
||||
SOCKET s1 = (SOCKET)jlong_to_ptr(listenSocket);
|
||||
SOCKET s2 = (SOCKET)jlong_to_ptr(acceptSocket);
|
||||
|
||||
setsockopt(s2, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, (char *)&s1, sizeof(s1));
|
||||
if (setsockopt(s2, SOL_SOCKET, SO_UPDATE_ACCEPT_CONTEXT, (char *)&s1, sizeof(s1)) == SOCKET_ERROR) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "setsockopt failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2008, 2022, Oracle and/or its affiliates. All rights reserved.
|
||||
* Copyright (c) 2008, 2023, Oracle and/or its affiliates. All rights reserved.
|
||||
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
||||
*
|
||||
* This code is free software; you can redistribute it and/or modify it
|
||||
@ -123,7 +123,9 @@ Java_sun_nio_ch_WindowsAsynchronousSocketChannelImpl_updateConnectContext(JNIEnv
|
||||
jlong socket)
|
||||
{
|
||||
SOCKET s = (SOCKET)jlong_to_ptr(socket);
|
||||
setsockopt(s, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0);
|
||||
if (setsockopt(s, SOL_SOCKET, SO_UPDATE_CONNECT_CONTEXT, NULL, 0) == SOCKET_ERROR) {
|
||||
JNU_ThrowIOExceptionWithLastError(env, "setsockopt failed");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user