summaryrefslogtreecommitdiff
path: root/java/src/IceInternal/TcpTransceiver.java
diff options
context:
space:
mode:
authorMark Spruiell <mes@zeroc.com>2006-04-10 18:25:35 +0000
committerMark Spruiell <mes@zeroc.com>2006-04-10 18:25:35 +0000
commit2273b3bfc528377f10dd4ab24b22ea840a2031f1 (patch)
treee7cdfb924fa3eac6f78fe2d4978c495449a63d6b /java/src/IceInternal/TcpTransceiver.java
parentremoving bogus deprecate metadata (diff)
downloadice-2273b3bfc528377f10dd4ab24b22ea840a2031f1.tar.bz2
ice-2273b3bfc528377f10dd4ab24b22ea840a2031f1.tar.xz
ice-2273b3bfc528377f10dd4ab24b22ea840a2031f1.zip
eliminating repeated creation of Selectors
Diffstat (limited to 'java/src/IceInternal/TcpTransceiver.java')
-rw-r--r--java/src/IceInternal/TcpTransceiver.java260
1 files changed, 124 insertions, 136 deletions
diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java
index 8e29b45e841..22364ec5482 100644
--- a/java/src/IceInternal/TcpTransceiver.java
+++ b/java/src/IceInternal/TcpTransceiver.java
@@ -44,6 +44,30 @@ final class TcpTransceiver implements Transceiver
{
_fd = null;
}
+ if(_readSelector != null)
+ {
+ try
+ {
+ _readSelector.close();
+ }
+ catch(java.io.IOException ex)
+ {
+ // Ignore.
+ }
+ _readSelector = null;
+ }
+ if(_writeSelector != null)
+ {
+ try
+ {
+ _writeSelector.close();
+ }
+ catch(java.io.IOException ex)
+ {
+ // Ignore.
+ }
+ _writeSelector = null;
+ }
}
}
@@ -117,95 +141,76 @@ final class TcpTransceiver implements Transceiver
{
java.nio.ByteBuffer buf = stream.prepareWrite();
- java.nio.channels.Selector selector = null;
-
- try
+ while(buf.hasRemaining())
{
- while(buf.hasRemaining())
+ try
{
- try
+ assert(_fd != null);
+ int ret = _fd.write(buf);
+
+ if(ret == -1)
+ {
+ throw new Ice.ConnectionLostException();
+ }
+
+ if(ret == 0)
{
- assert(_fd != null);
- int ret = _fd.write(buf);
+ if(timeout == 0)
+ {
+ throw new Ice.TimeoutException();
+ }
- if(ret == -1)
+ if(_writeSelector == null)
{
- throw new Ice.ConnectionLostException();
+ _writeSelector = java.nio.channels.Selector.open();
+ _fd.register(_writeSelector, java.nio.channels.SelectionKey.OP_WRITE, null);
}
- if(ret == 0)
+ try
{
- if(timeout == 0)
- {
- throw new Ice.TimeoutException();
- }
-
- if(selector == null)
- {
- selector = java.nio.channels.Selector.open();
- _fd.register(selector, java.nio.channels.SelectionKey.OP_WRITE, null);
- }
-
- try
+ if(timeout > 0)
{
- if(timeout > 0)
+ long start = System.currentTimeMillis();
+ int n = _writeSelector.select(timeout);
+ if(n == 0 && System.currentTimeMillis() >= start + timeout)
{
- long start = System.currentTimeMillis();
- int n = selector.select(timeout);
- if(n == 0 && System.currentTimeMillis() >= start + timeout)
- {
- throw new Ice.TimeoutException();
- }
- }
- else
- {
- selector.select();
+ throw new Ice.TimeoutException();
}
}
- catch(java.io.InterruptedIOException ex)
+ else
{
- // Ignore.
+ _writeSelector.select();
}
-
- continue;
}
-
-
- if(_traceLevels.network >= 3)
+ catch(java.io.InterruptedIOException ex)
{
- String s = "sent " + ret + " of " + buf.limit() + " bytes via tcp\n" + toString();
- _logger.trace(_traceLevels.networkCat, s);
+ // Ignore.
}
- if(_stats != null)
- {
- _stats.bytesSent(type(), ret);
- }
+ continue;
}
- catch(java.io.InterruptedIOException ex)
+
+
+ if(_traceLevels.network >= 3)
{
- continue;
+ String s = "sent " + ret + " of " + buf.limit() + " bytes via tcp\n" + toString();
+ _logger.trace(_traceLevels.networkCat, s);
}
- catch(java.io.IOException ex)
+
+ if(_stats != null)
{
- Ice.SocketException se = new Ice.SocketException();
- se.initCause(ex);
- throw se;
+ _stats.bytesSent(type(), ret);
}
}
- }
- finally
- {
- if(selector != null)
+ catch(java.io.InterruptedIOException ex)
{
- try
- {
- selector.close();
- }
- catch(java.io.IOException ex)
- {
- // Ignore.
- }
+ continue;
+ }
+ catch(java.io.IOException ex)
+ {
+ Ice.SocketException se = new Ice.SocketException();
+ se.initCause(ex);
+ throw se;
}
}
}
@@ -221,104 +226,85 @@ final class TcpTransceiver implements Transceiver
remaining = buf.remaining();
}
- java.nio.channels.Selector selector = null;
-
- try
+ while(buf.hasRemaining())
{
- while(buf.hasRemaining())
+ try
{
- try
+ assert(_fd != null);
+ int ret = _fd.read(buf);
+
+ if(ret == -1)
{
- assert(_fd != null);
- int ret = _fd.read(buf);
-
- if(ret == -1)
+ throw new Ice.ConnectionLostException();
+ }
+
+ if(ret == 0)
+ {
+ if(timeout == 0)
+ {
+ throw new Ice.TimeoutException();
+ }
+
+ if(_readSelector == null)
{
- throw new Ice.ConnectionLostException();
+ _readSelector = java.nio.channels.Selector.open();
+ _fd.register(_readSelector, java.nio.channels.SelectionKey.OP_READ, null);
}
- if(ret == 0)
+ try
{
- if(timeout == 0)
- {
- throw new Ice.TimeoutException();
- }
-
- if(selector == null)
- {
- selector = java.nio.channels.Selector.open();
- _fd.register(selector, java.nio.channels.SelectionKey.OP_READ, null);
- }
-
- try
+ if(timeout > 0)
{
- if(timeout > 0)
+ long start = System.currentTimeMillis();
+ int n = _readSelector.select(timeout);
+ if(n == 0 && System.currentTimeMillis() >= start + timeout)
{
- long start = System.currentTimeMillis();
- int n = selector.select(timeout);
- if(n == 0 && System.currentTimeMillis() >= start + timeout)
- {
- throw new Ice.TimeoutException();
- }
- }
- else
- {
- selector.select();
+ throw new Ice.TimeoutException();
}
}
- catch(java.io.InterruptedIOException ex)
+ else
{
- // Ignore.
+ _readSelector.select();
}
-
- continue;
}
-
- if(ret > 0)
+ catch(java.io.InterruptedIOException ex)
{
- if(_traceLevels.network >= 3)
- {
- String s = "received " + ret + " of " + remaining + " bytes via tcp\n" + toString();
- _logger.trace(_traceLevels.networkCat, s);
- }
+ // Ignore.
+ }
- if(_stats != null)
- {
- _stats.bytesReceived(type(), ret);
- }
- }
- }
- catch(java.io.InterruptedIOException ex)
- {
continue;
}
- catch(java.io.IOException ex)
+
+ if(ret > 0)
{
- if(Network.connectionLost(ex))
+ if(_traceLevels.network >= 3)
{
- Ice.ConnectionLostException se = new Ice.ConnectionLostException();
- se.initCause(ex);
- throw se;
+ String s = "received " + ret + " of " + remaining + " bytes via tcp\n" + toString();
+ _logger.trace(_traceLevels.networkCat, s);
+ }
+
+ if(_stats != null)
+ {
+ _stats.bytesReceived(type(), ret);
}
-
- Ice.SocketException se = new Ice.SocketException();
- se.initCause(ex);
- throw se;
}
}
- }
- finally
- {
- if(selector != null)
+ catch(java.io.InterruptedIOException ex)
{
- try
- {
- selector.close();
- }
- catch(java.io.IOException ex)
+ continue;
+ }
+ catch(java.io.IOException ex)
+ {
+ if(Network.connectionLost(ex))
{
- // Ignore.
+ Ice.ConnectionLostException se = new Ice.ConnectionLostException();
+ se.initCause(ex);
+ throw se;
}
+
+ Ice.SocketException se = new Ice.SocketException();
+ se.initCause(ex);
+ throw se;
}
}
}
@@ -361,4 +347,6 @@ final class TcpTransceiver implements Transceiver
private Ice.Logger _logger;
private Ice.Stats _stats;
private String _desc;
+ private java.nio.channels.Selector _readSelector;
+ private java.nio.channels.Selector _writeSelector;
}