diff options
author | Benoit Foucher <benoit@zeroc.com> | 2007-05-23 12:51:51 +0000 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2007-05-23 12:51:51 +0000 |
commit | c1323acecce7e15c58a0842da68f9cfc357355b2 (patch) | |
tree | e3ccf8b3fcf50997a65b385b03b37e07ba011752 /java/src/IceInternal/Network.java | |
parent | Added Ice.TCP.SndSize/Ice.TCP.RcvSize properties, fixed throughput issue on (diff) | |
download | ice-c1323acecce7e15c58a0842da68f9cfc357355b2.tar.bz2 ice-c1323acecce7e15c58a0842da68f9cfc357355b2.tar.xz ice-c1323acecce7e15c58a0842da68f9cfc357355b2.zip |
Added Ice.TCP.SndSize/Ice.TCP.RcvSize properties, fixed throughput
performance issue on Win32.
Diffstat (limited to 'java/src/IceInternal/Network.java')
-rw-r--r-- | java/src/IceInternal/Network.java | 167 |
1 files changed, 159 insertions, 8 deletions
diff --git a/java/src/IceInternal/Network.java b/java/src/IceInternal/Network.java index cfa52fa0e4c..a3828f8e748 100644 --- a/java/src/IceInternal/Network.java +++ b/java/src/IceInternal/Network.java @@ -463,11 +463,11 @@ public final class Network } public static void - setSendBufferSize(java.nio.channels.DatagramChannel fd, int size) + setSendBufferSize(java.nio.channels.SocketChannel fd, int size) { try { - java.net.DatagramSocket socket = fd.socket(); + java.net.Socket socket = fd.socket(); socket.setSendBufferSize(size); } catch(java.io.IOException ex) @@ -480,12 +480,12 @@ public final class Network } public static int - getSendBufferSize(java.nio.channels.DatagramChannel fd) + getSendBufferSize(java.nio.channels.SocketChannel fd) { int size; try { - java.net.DatagramSocket socket = fd.socket(); + java.net.Socket socket = fd.socket(); size = socket.getSendBufferSize(); } catch(java.io.IOException ex) @@ -499,11 +499,11 @@ public final class Network } public static void - setRecvBufferSize(java.nio.channels.ServerSocketChannel fd, int size) + setRecvBufferSize(java.nio.channels.SocketChannel fd, int size) { try { - java.net.ServerSocket socket = fd.socket(); + java.net.Socket socket = fd.socket(); socket.setReceiveBufferSize(size); } catch(java.io.IOException ex) @@ -515,12 +515,31 @@ public final class Network } } + public static int + getRecvBufferSize(java.nio.channels.SocketChannel fd) + { + int size; + try + { + java.net.Socket socket = fd.socket(); + size = socket.getReceiveBufferSize(); + } + catch(java.io.IOException ex) + { + closeSocketNoThrow(fd); + Ice.SocketException se = new Ice.SocketException(); + se.initCause(ex); + throw se; + } + return size; + } + public static void - setRecvBufferSize(java.nio.channels.DatagramChannel fd, int size) + setRecvBufferSize(java.nio.channels.ServerSocketChannel fd, int size) { try { - java.net.DatagramSocket socket = fd.socket(); + java.net.ServerSocket socket = fd.socket(); socket.setReceiveBufferSize(size); } catch(java.io.IOException ex) @@ -551,6 +570,59 @@ public final class Network return size; } + public static void + setSendBufferSize(java.nio.channels.DatagramChannel fd, int size) + { + try + { + java.net.DatagramSocket socket = fd.socket(); + socket.setSendBufferSize(size); + } + catch(java.io.IOException ex) + { + closeSocketNoThrow(fd); + Ice.SocketException se = new Ice.SocketException(); + se.initCause(ex); + throw se; + } + } + + public static int + getSendBufferSize(java.nio.channels.DatagramChannel fd) + { + int size; + try + { + java.net.DatagramSocket socket = fd.socket(); + size = socket.getSendBufferSize(); + } + catch(java.io.IOException ex) + { + closeSocketNoThrow(fd); + Ice.SocketException se = new Ice.SocketException(); + se.initCause(ex); + throw se; + } + return size; + } + + public static void + setRecvBufferSize(java.nio.channels.DatagramChannel fd, int size) + { + try + { + java.net.DatagramSocket socket = fd.socket(); + socket.setReceiveBufferSize(size); + } + catch(java.io.IOException ex) + { + closeSocketNoThrow(fd); + Ice.SocketException se = new Ice.SocketException(); + se.initCause(ex); + throw se; + } + } + public static int getRecvBufferSize(java.nio.channels.DatagramChannel fd) { @@ -798,6 +870,85 @@ public final class Network return fds; } + public static void + setTcpBufSize(java.nio.channels.SocketChannel socket, Ice.Properties properties, Ice.Logger logger) + { + // + // By default, on Windows we use a 128KB buffer size. On Unix + // platforms, we use the system defaults. + // + int dfltBufSize = 0; + if(System.getProperty("os.name").startsWith("Windows")) + { + dfltBufSize = 128 * 1024; + } + + int sizeRequested = properties.getPropertyAsIntWithDefault("Ice.TCP.RcvSize", dfltBufSize); + if(sizeRequested > 0) + { + // + // Try to set the buffer size. The kernel will silently adjust + // the size to an acceptable value. Then read the size back to + // get the size that was actually set. + // + setRecvBufferSize(socket, sizeRequested); + int size = getRecvBufferSize(socket); + if(size < sizeRequested) // Warn if the size that was set is less than the requested size. + { + logger.warning("TCP receive buffer size: requested size of " + sizeRequested + " adjusted to " + size); + } + } + + sizeRequested = properties.getPropertyAsIntWithDefault("Ice.TCP.SndSize", dfltBufSize); + if(sizeRequested > 0) + { + // + // Try to set the buffer size. The kernel will silently adjust + // the size to an acceptable value. Then read the size back to + // get the size that was actually set. + // + setSendBufferSize(socket, sizeRequested); + int size = getSendBufferSize(socket); + if(size < sizeRequested) // Warn if the size that was set is less than the requested size. + { + logger.warning("TCP send buffer size: requested size of " + sizeRequested + " adjusted to " + size); + } + } + } + + public static void + setTcpBufSize(java.nio.channels.ServerSocketChannel socket, Ice.Properties properties, Ice.Logger logger) + { + // + // By default, on Windows we use a 128KB buffer size. On Unix + // platforms, we use the system defaults. + // + int dfltBufSize = 0; + if(System.getProperty("os.name").startsWith("Windows")) + { + dfltBufSize = 128 * 1024; + } + + // + // Get property for buffer size. + // + int sizeRequested = properties.getPropertyAsIntWithDefault("Ice.TCP.RcvSize", dfltBufSize); + if(sizeRequested > 0) + { + // + // Try to set the buffer size. The kernel will silently adjust + // the size to an acceptable value. Then read the size back to + // get the size that was actually set. + // + setRecvBufferSize(socket, sizeRequested); + int size = getRecvBufferSize(socket); + if(size < sizeRequested) // Warn if the size that was set is less than the requested size. + { + logger.warning("TCP receive buffer size: requested size of " + sizeRequested + " adjusted to " + size); + } + } + } + public static String fdToString(java.nio.channels.SelectableChannel fd) { |