diff options
author | warrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-07-02 18:50:21 +0000 |
---|---|---|
committer | warrenl <warrenl@138bc75d-0d04-0410-961f-82ee72b054a4> | 1999-07-02 18:50:21 +0000 |
commit | ea3a6baa1ffa7f8751c16fa4e7d23a68c1351b5c (patch) | |
tree | 89f1c6a59d76e1aa9a6e0324398e2ce387b03ebd /libjava/java/net | |
parent | f077abbdbfc88cea7d7c0f154639c63d943a64d1 (diff) | |
download | ppe42-gcc-ea3a6baa1ffa7f8751c16fa4e7d23a68c1351b5c.tar.gz ppe42-gcc-ea3a6baa1ffa7f8751c16fa4e7d23a68c1351b5c.zip |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@27929 138bc75d-0d04-0410-961f-82ee72b054a4
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 29a236c8fa8..9474eb2045f 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); |