# HG changeset patch # User one # Date 1343721766 -32400 # Node ID bb2538b7eb8d8aeabbeda7b9ed4a9db87049629e # Parent e9d07562b6b7393a9df1943310993919e066ed2f selectMode flag diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiBroadcast.java --- a/src/wifibroadcast/WifiBroadcast.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiBroadcast.java Tue Jul 31 17:02:46 2012 +0900 @@ -81,5 +81,9 @@ throw new SocketException(); } + @Override + public void selectMode(boolean mode) { + } + } diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiBroadcastTest.java --- a/src/wifibroadcast/WifiBroadcastTest.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiBroadcastTest.java Tue Jul 31 17:02:46 2012 +0900 @@ -23,6 +23,7 @@ private boolean bchannel; private boolean tcp; private String nis = "en1"; + private boolean selectMode = false; public WifiBroadcastTest() { ports.add(0,DefaultPort); @@ -90,6 +91,7 @@ case "-n": i++; nis = getOptString(args, nis, i); break; case "-p": i++; setPort(args,i); break; case "-a": i++; setAddress(args, i); break; + case "-select": i++; selectMode = true; break; default: i++; System.out.println( "(default) Broadcast DatagramSocket\n"+ @@ -105,6 +107,7 @@ "-n en1 Network Interface name for multicast (default en1)\n"+ "-p N broadcast/multicast port\n"+ "-a S broadcast/multicast address\n"+ + "-select use select for timeout\n"+ "-h print this\n"+ "" ); @@ -173,6 +176,7 @@ } public Thread sender(final WifiReceiver wbs, final int count) { + wbs.selectMode(selectMode); Runnable sender = new Runnable() { @Override @@ -215,7 +219,7 @@ } public Thread receiver(final WifiReceiver wbr, final int id, final int count, final long timeout) { - + wbr.selectMode(selectMode); Runnable receiver = new Runnable() { @Override public void run() { diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiDatagram.java --- a/src/wifibroadcast/WifiDatagram.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiDatagram.java Tue Jul 31 17:02:46 2012 +0900 @@ -10,6 +10,9 @@ import java.nio.ByteBuffer; public class WifiDatagram implements WifiReceiver { + /** + * Test class for non broadcast/multicast datagram + */ private DatagramSocket s; private int port; @@ -57,4 +60,8 @@ return InetAddress.getByName("127.0.0.1"); } + @Override + public void selectMode(boolean mode) { + } + } diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiMulticast.java --- a/src/wifibroadcast/WifiMulticast.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiMulticast.java Tue Jul 31 17:02:46 2012 +0900 @@ -37,5 +37,10 @@ testData.position(testData.limit()); } + @Override + public void selectMode(boolean mode) { + + } + } diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiMulticastChannel.java --- a/src/wifibroadcast/WifiMulticastChannel.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiMulticastChannel.java Tue Jul 31 17:02:46 2012 +0900 @@ -19,7 +19,7 @@ protected SocketAddress sAddr; // select on DatagramChannel does not work now protected Selector selector; - protected boolean selectMode = true; + protected boolean selectMode = false; public WifiMulticastChannel() {} @@ -78,4 +78,9 @@ // } } + @Override + public void selectMode(boolean mode) { + selectMode = mode; + } + } diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiReceiver.java --- a/src/wifibroadcast/WifiReceiver.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiReceiver.java Tue Jul 31 17:02:46 2012 +0900 @@ -10,6 +10,8 @@ void recieve(ByteBuffer testData, long timeout) throws IOException; void send(ByteBuffer testData) throws IOException; + + void selectMode(boolean mode); } diff -r e9d07562b6b7 -r bb2538b7eb8d src/wifibroadcast/WifiTCP.java --- a/src/wifibroadcast/WifiTCP.java Tue Jul 31 16:32:03 2012 +0900 +++ b/src/wifibroadcast/WifiTCP.java Tue Jul 31 17:02:46 2012 +0900 @@ -4,6 +4,7 @@ import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketAddress; +import java.net.StandardSocketOptions; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector; @@ -16,7 +17,7 @@ protected SocketAddress sAddr; // select on DatagramChannel does not work now protected static Selector selector; - protected boolean selectMode = false; + protected boolean selectMode = true; private SocketChannel sc; private static ServerSocketChannel ss; @@ -33,8 +34,8 @@ mAddr = InetAddress.getByName(mCASTADDR); sAddr = new InetSocketAddress(mAddr,port); if (sender == SocketType.Receiver) { + ss.setOption(StandardSocketOptions.SO_REUSEADDR, true); ss.bind(new InetSocketAddress(port)); - } else { sc = SelectorProvider.provider().openSocketChannel(); sc.connect(sAddr); @@ -71,4 +72,9 @@ // } } + @Override + public void selectMode(boolean mode) { + selectMode = mode; + } + }