summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/Network.java
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2007-05-23 12:51:51 +0000
committerBenoit Foucher <benoit@zeroc.com>2007-05-23 12:51:51 +0000
commitc1323acecce7e15c58a0842da68f9cfc357355b2 (patch)
treee3ccf8b3fcf50997a65b385b03b37e07ba011752 /java/src/IceInternal/Network.java
parentAdded Ice.TCP.SndSize/Ice.TCP.RcvSize properties, fixed throughput issue on (diff)
downloadice-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.java167
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)
{