Date: Sat, 30 Jan 2010 19:23:44 -0600 From: Joe Lin <jlin@maxiscale.com> To: "freebsd-java@FreeBSD.org" <freebsd-java@FreeBSD.org> Subject: DatagramCahnnel scatter/gather problem on diablo 1.6.0_07-b02 Message-ID: <8B6860326495B2438DCBEA74AA981C7A77B772EF@MBX01.exg5.exghost.com>
next in thread | raw e-mail | index | archive | help
Hi I wrote a sample program trying to use DatagramChannel.write(ByteBuffer[= ] bufs). The exact same code works on Windows and Linux. But it fails on th= e Diablo VM under FreeBSD 7.0 64 bit. The exception: Exception in thread "main" java.io.IOException: Invalid argument at sun.nio.ch.DatagramDispatcher.writev0(Native Method) at sun.nio.ch.DatagramDispatcher.writev(DatagramDispatcher.java:37) at sun.nio.ch.IOUtil.write(IOUtil.java:164) at sun.nio.ch.DatagramChannelImpl.write0(DatagramChannelImpl.java:4= 14) at sun.nio.ch.DatagramChannelImpl.write(DatagramChannelImpl.java:43= 1) at java.nio.channels.DatagramChannel.write(DatagramChannel.java:418= ) at coco.McastSender.main(McastSender.java:68). Following is the test program. Thanks for any help: public class McastSender { public static void main(String[] args) throws IOException { DatagramChannel channel =3D DatagramChannel.open(); DatagramSocket socket =3D channel.socket(); System.out.println("channel:" + channel + ", socket:" + socket); byte[] buf =3D new byte[1024]; DatagramPacket packet =3D new DatagramPacket(buf, buf.length); BufferedReader reader =3D new BufferedReader(new InputStreamReader(= System.in)); InetAddress address =3D InetAddress.getByName(args[0]); while ( true ) { System.out.println("waiting..."); String line =3D reader.readLine(); channel.connect(new InetSocketAddress(address, 9998)); if ( channel.isConnected() ) System.out.println("channel is connected"); else System.out.println("channel is not connected"); packet.setData("Hello".getBytes()); ByteBuffer[] bufs =3D new ByteBuffer[2]; bufs[0] =3D ByteBuffer.allocate(64); bufs[0].put("Hello".getBytes()); bufs[0].flip(); bufs[1] =3D ByteBuffer.allocate(64); bufs[1].put("World".getBytes()); bufs[1].flip(); channel.write(bufs); System.out.println("sent to " + address); channel.disconnect(); } } }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8B6860326495B2438DCBEA74AA981C7A77B772EF>