[kaffe] [PATCH] java.net.DatagramSocket:setBroadcast

Michal Schmidt xschmi00@stud.feec.vutbr.cz
Mon May 10 07:41:01 2004


This is a multi-part message in MIME format.
--------------090608030204070701020102
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit

Hello!

I'm a beginner in Java and I'm new to Kaffe. I tried running JLink 
(http://user.it.uu.se/~alse7905/JLink/) under Kaffe. At first it didn't 
work because of missing implementation of javax.swing.*. I modified the 
JLink source and removed all references to javax.swing. The JLink GUI 
wasn't that important for me anyway. Then I hit another problem - Kaffe 
doesn't implement method setBroadcast in java.net.DatagramSocket correctly.
I've fixed this and now it works for me. The needed changes are very 
small. I'm attaching a patch against kaffe-1.1.4 from Debian unstable.
I've also created a little testing program, which is attached too.
Without the patch it gives this output:

Socket created
First sent
FAILURE!
java.net.SocketException: Unknown socket option
    at gnu.java.net.PlainDatagramSocketImpl.setOption 
(PlainDatagramSocketImpl.java:71)
    at java.net.DatagramSocket.setBroadcast (DatagramSocket.java:837)
    at testbroadcast.main (testbroadcast.java:18)

With the patch the output is this:

Socket created
First sent
Broadcast flag set
Second sent
Broadcast flag unset
The next one should fail:
It did fail, OK. Here's the exception:
java.net.SocketException: Permission denied
    at gnu.java.net.PlainDatagramSocketImpl.send 
(PlainDatagramSocketImpl.java)
    at java.net.DatagramSocket.send (DatagramSocket.java:624)
    at testbroadcast.SendSomeBroadcast (testbroadcast.java:9)
    at testbroadcast.main (testbroadcast.java:26)
That's all, folks!

I'm looking forward to your comments.
Michal Schmidt

--------------090608030204070701020102
Content-Type: text/x-java;
 name="testbroadcast.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="testbroadcast.java"

import java.net.*;
import java.io.*;

public class testbroadcast {

	static void SendSomeBroadcast(DatagramSocket socket) throws UnknownHostException,IOException {
		byte data[]=new byte[42];
		DatagramPacket packet=new DatagramPacket(data, data.length, InetAddress.getByName("255.255.255.255"), 8000);
		socket.send(packet);
	}
	
	public static void main(String[] args) {
		try {
			DatagramSocket udpSocket=new DatagramSocket(8000);
			System.out.println("Socket created");
			SendSomeBroadcast(udpSocket);
			System.out.println("First sent");
			udpSocket.setBroadcast(true);
			System.out.println("Broadcast flag set");
			SendSomeBroadcast(udpSocket);
			System.out.println("Second sent");
			udpSocket.setBroadcast(false);
			System.out.println("Broadcast flag unset");
			try {
				System.out.println("The next one should fail:");
				SendSomeBroadcast(udpSocket);
				System.out.println("DIDN'T FAIL! THAT'S BAD.");
			} catch(Exception e) {
				System.out.println("It did fail, OK. Here's the exception:");
				e.printStackTrace();
			}
			System.out.println("That's all, folks!");
		} catch(Exception e) {
			System.out.println("FAILURE!");
			e.printStackTrace();
		}
	}
}


--------------090608030204070701020102
Content-Type: text/x-patch;
 name="setBroadcast.patch"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
 filename="setBroadcast.patch"

diff -Nurp kaffe-1.1.4/libraries/clib/net/PlainDatagramSocketImpl.c kaffe-1.1.4-mich/libraries/clib/net/PlainDatagramSocketImpl.c
--- kaffe-1.1.4/libraries/clib/net/PlainDatagramSocketImpl.c	2004-01-25 22:13:11.000000000 +0100
+++ kaffe-1.1.4-mich/libraries/clib/net/PlainDatagramSocketImpl.c	2004-05-10 16:15:24.000000000 +0200
@@ -54,6 +54,9 @@ static const struct {
 #ifdef SO_REUSEADDR
     { java_net_SocketOptions_SO_REUSEADDR,	SOL_SOCKET,	SO_REUSEADDR },
 #endif
+#ifdef SO_BROADCAST
+    { java_net_SocketOptions_SO_BROADCAST,	SOL_SOCKET,	SO_BROADCAST },
+#endif
   };
 
 #if defined(KAFFE_VMDEBUG) && !defined(NDEBUG)
diff -Nurp kaffe-1.1.4/libraries/javalib/gnu/java/net/PlainDatagramSocketImpl.java kaffe-1.1.4-mich/libraries/javalib/gnu/java/net/PlainDatagramSocketImpl.java
--- kaffe-1.1.4/libraries/javalib/gnu/java/net/PlainDatagramSocketImpl.java	2003-09-28 21:54:09.000000000 +0200
+++ kaffe-1.1.4-mich/libraries/javalib/gnu/java/net/PlainDatagramSocketImpl.java	2004-05-10 16:15:55.000000000 +0200
@@ -55,6 +55,7 @@ public void setOption(int option, Object
 	case SO_RCVBUF:
 	case SO_LINGER:
 	case SO_REUSEADDR:
+	case SO_BROADCAST:
 		break;
 	case SO_TIMEOUT:
 		timeout = ((Integer)data).intValue();

--------------090608030204070701020102--