This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Patch: IP_MULTICAST_LOOP support


On Fri, 2005-01-28 at 17:36 -0700, Tom Tromey wrote:
> Anthony> +	jbyteArray haddress = inetaddr->addr;
> Anthony> +	jbyte *bytes = elements (haddress);
> Anthony> +	int len = haddress->length;
> 
> It doesn't look like these are used...?

This was all messed up.  See attached tested version.

> 
> Anthony> +	if (::setsockopt (native_fd, level, opname, (char *) &val,
> Anthony> +			  val_len) != 0)
> Anthony> +	  goto error;
> 
> According to this page:
> 
> http://www.linux.org/docs/ldp/howto/Multicast-HOWTO-6.html
> 
> ... the 'val' argument must be an 'unsigned char'.  So, I suspect the
> above would fail on a big-endian machine.  (Though I am not an expert
> here by any stretch.)

"must be"?  I thought there was some flexibility here, as we also pass
the size of 'val' as the last argument.

The attached patch also enables the SO_REUSEADDR option.  I think this
was disabled in error..

2005-01-28  Anthony Green  <green@redhat.com>

	* gnu/java/net/natPlainDatagramSocketImplPosix.cc (setOption): 
	Support IP_MULTICAST_LOOP.

	* gnu/java/net/natPlainSocketImplPosix.cc (setOption): Add
	SO_REUSEADDR support.


Index: gnu/java/net/natPlainDatagramSocketImplPosix.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainDatagramSocketImplPosix.cc,v
retrieving revision 1.7
diff -c -u -p -r1.7 natPlainDatagramSocketImplPosix.cc
--- gnu/java/net/natPlainDatagramSocketImplPosix.cc	17 Mar 2004 08:10:28 -0000	1.7
+++ gnu/java/net/natPlainDatagramSocketImplPosix.cc	29 Jan 2005 15:58:33 -0000
@@ -602,9 +602,22 @@ gnu::java::net::PlainDatagramSocketImpl:
         return;
 	
       case _Jv_IP_MULTICAST_LOOP_ :
-        throw new ::java::net::SocketException (
-          JvNewStringUTF ("IP_MULTICAST_LOOP: not yet implemented"));
-        return;
+	haddress = ((::java::net::InetAddress *) value)->addr;
+	len = haddress->length;
+	if (len == 4)
+	  {
+	    level = IPPROTO_IP;
+	    opname = IP_MULTICAST_LOOP;
+	  }
+	else
+	  {
+	    level = IPPROTO_IPV6;
+	    opname = IPV6_MULTICAST_LOOP;
+	  }
+	if (::setsockopt (native_fd, level, opname, (char *) &val,
+			  val_len) != 0)
+	  goto error;
+	return;
 	
       case _Jv_IP_TOS_ :
         if (::setsockopt (native_fd, SOL_SOCKET, IP_TOS, (char *) &val,
Index: gnu/java/net/natPlainSocketImplPosix.cc
===================================================================
RCS file: /cvs/gcc/gcc/libjava/gnu/java/net/natPlainSocketImplPosix.cc,v
retrieving revision 1.10
diff -c -u -p -r1.10 natPlainSocketImplPosix.cc
--- gnu/java/net/natPlainSocketImplPosix.cc	22 Oct 2004 15:27:04 -0000	1.10
+++ gnu/java/net/natPlainSocketImplPosix.cc	29 Jan 2005 15:58:33 -0000
@@ -637,9 +637,14 @@ gnu::java::net::PlainSocketImpl::setOpti
         return;
 	
       case _Jv_SO_REUSEADDR_ :
-        throw new ::java::net::SocketException (
-          JvNewStringUTF ("SO_REUSEADDR: not valid for TCP"));
-        return;
+#if defined(SO_REUSEADDR)
+	if (::setsockopt (native_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &val,
+	    val_len) != 0)
+	  goto error;
+#else
+        throw new ::java::lang::InternalError (
+          JvNewStringUTF ("SO_REUSEADDR not supported"));
+#endif 
 
       case _Jv_SO_TIMEOUT_ :
         timeout = val;



Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]