src/java.base/windows/native/libnet/TwoStacksPlainDatagramSocketImpl.c

Print this page




2194 
2195     /*
2196      * Map the Java level socket option to the platform specific
2197      * level and option name.
2198      */
2199     if (NET_MapSocketOption(opt, &level, &optname)) {
2200         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Invalid option");
2201         return NULL;
2202     }
2203 
2204     if (fd == -1) {
2205         if (NET_MapSocketOptionV6(opt, &level, &optname)) {
2206             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Invalid option");
2207             return NULL;
2208         }
2209         fd = fd1; /* must be IPv6 only */
2210     }
2211 
2212     optlen = sizeof(optval.i);
2213     if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) {
2214         char errmsg[255];
2215         sprintf(errmsg, "error getting socket option: %s\n", strerror(errno));



2216         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", errmsg);
2217         return NULL;
2218     }
2219 
2220     switch (opt) {
2221         case java_net_SocketOptions_SO_BROADCAST:
2222         case java_net_SocketOptions_SO_REUSEADDR:
2223             return createBoolean(env, optval.i);
2224 
2225         case java_net_SocketOptions_IP_MULTICAST_LOOP:
2226             /* getLoopbackMode() returns true if IP_MULTICAST_LOOP is disabled */
2227             return createBoolean(env, !optval.i);
2228 
2229         case java_net_SocketOptions_SO_SNDBUF:
2230         case java_net_SocketOptions_SO_RCVBUF:
2231         case java_net_SocketOptions_IP_TOS:
2232             return createInteger(env, optval.i);
2233 
2234         default :
2235             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",




2194 
2195     /*
2196      * Map the Java level socket option to the platform specific
2197      * level and option name.
2198      */
2199     if (NET_MapSocketOption(opt, &level, &optname)) {
2200         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Invalid option");
2201         return NULL;
2202     }
2203 
2204     if (fd == -1) {
2205         if (NET_MapSocketOptionV6(opt, &level, &optname)) {
2206             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", "Invalid option");
2207             return NULL;
2208         }
2209         fd = fd1; /* must be IPv6 only */
2210     }
2211 
2212     optlen = sizeof(optval.i);
2213     if (NET_GetSockOpt(fd, level, optname, (void *)&optval, &optlen) < 0) {
2214         char tmpbuf[255];
2215         int size = 0;
2216         char errmsg[255 + 31];
2217         getErrorString(errno, tmpbuf, sizeof(tmpbuf));
2218         sprintf(errmsg, "error getting socket option: %s\n", tmpbuf);
2219         JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException", errmsg);
2220         return NULL;
2221     }
2222 
2223     switch (opt) {
2224         case java_net_SocketOptions_SO_BROADCAST:
2225         case java_net_SocketOptions_SO_REUSEADDR:
2226             return createBoolean(env, optval.i);
2227 
2228         case java_net_SocketOptions_IP_MULTICAST_LOOP:
2229             /* getLoopbackMode() returns true if IP_MULTICAST_LOOP is disabled */
2230             return createBoolean(env, !optval.i);
2231 
2232         case java_net_SocketOptions_SO_SNDBUF:
2233         case java_net_SocketOptions_SO_RCVBUF:
2234         case java_net_SocketOptions_IP_TOS:
2235             return createInteger(env, optval.i);
2236 
2237         default :
2238             JNU_ThrowByName(env, JNU_JAVANETPKG "SocketException",