diff options
author | Warren Levy <warrenl@cygnus.com> | 1999-07-02 18:50:21 +0000 |
---|---|---|
committer | Warren Levy <warrenl@gcc.gnu.org> | 1999-07-02 18:50:21 +0000 |
commit | 6130b0af10db39df1c0dc4fa2c1c176bee119e32 (patch) | |
tree | 89f1c6a59d76e1aa9a6e0324398e2ce387b03ebd /libjava/java/net | |
parent | 5193d0bfa5f9d4e7a7faa0c1f56ef4e4daec34fe (diff) | |
download | gcc-6130b0af10db39df1c0dc4fa2c1c176bee119e32.zip gcc-6130b0af10db39df1c0dc4fa2c1c176bee119e32.tar.gz gcc-6130b0af10db39df1c0dc4fa2c1c176bee119e32.tar.bz2 |
configure: Rebuilt.
* configure: Rebuilt.
* configure.in: Added inet_ntoa to AC_CHECK_FUNCS.
* include/config.h.in: Rebuilt.
* java/net/natPlainDatagramSocketImpl.cc: Added header checking.
(mcastGrp): Updated FIXME comments.
(setOption): Fixed typo.
(getOption):Implemented IP_MULTICAST_IF.
From-SVN: r27929
Diffstat (limited to 'libjava/java/net')
-rw-r--r-- | libjava/java/net/natPlainDatagramSocketImpl.cc | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/libjava/java/net/natPlainDatagramSocketImpl.cc b/libjava/java/net/natPlainDatagramSocketImpl.cc index 29a236c..9474eb2 100644 --- a/libjava/java/net/natPlainDatagramSocketImpl.cc +++ b/libjava/java/net/natPlainDatagramSocketImpl.cc @@ -8,11 +8,22 @@ details. */ #include <config.h> +#ifdef HAVE_SYS_TYPES_H #include <sys/types.h> +#endif +#ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> +#endif #include <sys/time.h> +#ifdef HAVE_SYS_SELECT_H #include <sys/select.h> +#endif +#ifdef HAVE_NETINET_IN_H #include <netinet/in.h> +#endif +#ifdef HAVE_ARPA_INET_H +#include <arpa/inet.h> +#endif #include <errno.h> #include <stdio.h> #include <string.h> @@ -319,6 +330,7 @@ java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, opname = join ? IP_ADD_MEMBERSHIP : IP_DROP_MEMBERSHIP; memcpy (&u.mreq.imr_multiaddr, bytes, len); // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. u.mreq.imr_interface.s_addr = htonl (INADDR_ANY); len = sizeof (struct ip_mreq); ptr = (const char *) &u.mreq; @@ -330,6 +342,7 @@ java::net::PlainDatagramSocketImpl::mcastGrp (java::net::InetAddress *inetaddr, opname = join ? IPV6_ADD_MEMBERSHIP : IPV6_DROP_MEMBERSHIP; memcpy (&u.mreq6.ipv6mr_multiaddr, bytes, len); // FIXME: If a non-default interface is set, use it; see Stevens p. 501. + // Maybe not, see note in last paragraph at bottom of Stevens p. 497. u.mreq6.ipv6mr_interface = 0; len = sizeof (struct ipv6_mreq); ptr = (const char *) &u.mreq6; @@ -431,7 +444,7 @@ java::net::PlainDatagramSocketImpl::setOption (jint optID, level = IPPROTO_IPV6; opname = IPV6_MULTICAST_IF; memcpy (&u.addr6, bytes, len); - len = sizeof (struct in_addr6); + len = sizeof (struct in6_addr); ptr = (const char *) &u.addr6; } #endif @@ -524,9 +537,23 @@ java::net::PlainDatagramSocketImpl::getOption (jint optID) #endif break; case _Jv_IP_MULTICAST_IF_ : - // FIXME: TODO - Implement IP_MULTICAST_IF. - JvThrow (new java::lang::InternalError ( - JvNewStringUTF ("IP_MULTICAST_IF: option not implemented"))); +#ifdef HAVE_INET_NTOA + struct in_addr inaddr; + socklen_t inaddr_len; + char *bytes; + + inaddr_len = sizeof(inaddr); + if (::getsockopt (fnum, IPPROTO_IP, IP_MULTICAST_IF, (char *) &inaddr, + &inaddr_len) != 0) + goto error; + + bytes = inet_ntoa (inaddr); + + return java::net::InetAddress::getByName (JvNewStringLatin1 (bytes)); +#else + JvThrow (new java::net::SocketException ( + JvNewStringUTF ("IP_MULTICAST_IF: not available - no inet_ntoa()"))); +#endif break; case _Jv_SO_TIMEOUT_ : return new java::lang::Integer (timeout); |