[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--