diff options
author | Benoit Foucher <benoit@zeroc.com> | 2009-08-21 15:55:01 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2009-08-21 15:55:01 +0200 |
commit | b9f2fa14fb3f222a6ec5e0a93bf25fe5ad12b56a (patch) | |
tree | 183215e2dbeadfbc871b800ce09726e58af38b91 /java/src/IceInternal/TcpTransceiver.java | |
parent | adding compression cookbook demo (diff) | |
download | ice-b9f2fa14fb3f222a6ec5e0a93bf25fe5ad12b56a.tar.bz2 ice-b9f2fa14fb3f222a6ec5e0a93bf25fe5ad12b56a.tar.xz ice-b9f2fa14fb3f222a6ec5e0a93bf25fe5ad12b56a.zip |
IOCP changes, bug 3501, 4200, 4156, 3101
Diffstat (limited to 'java/src/IceInternal/TcpTransceiver.java')
-rw-r--r-- | java/src/IceInternal/TcpTransceiver.java | 46 |
1 files changed, 24 insertions, 22 deletions
diff --git a/java/src/IceInternal/TcpTransceiver.java b/java/src/IceInternal/TcpTransceiver.java index d322169a719..6d4a2901f5e 100644 --- a/java/src/IceInternal/TcpTransceiver.java +++ b/java/src/IceInternal/TcpTransceiver.java @@ -18,13 +18,13 @@ final class TcpTransceiver implements Transceiver return _fd; } - public SocketStatus + public int initialize() { if(_state == StateNeedConnect) { _state = StateConnectPending; - return SocketStatus.NeedConnect; + return SocketOperation.Connect; } else if(_state <= StateConnectPending) { @@ -51,13 +51,13 @@ final class TcpTransceiver implements Transceiver } } assert(_state == StateConnected); - return SocketStatus.Finished; + return SocketOperation.None; } public void close() { - if(_traceLevels.network >= 1) + if(_state == StateConnected && _traceLevels.network >= 1) { String s = "closing tcp connection\n" + toString(); _logger.trace(_traceLevels.networkCat, s); @@ -85,9 +85,13 @@ final class TcpTransceiver implements Transceiver { final int size = buf.b.limit(); int packetSize = size - buf.b.position(); - if(_maxPacketSize > 0 && packetSize > _maxPacketSize) + + // + // Limit packet size to avoid performance problems on WIN32 + // + if(_maxSendPacketSize > 0 && packetSize > _maxSendPacketSize) { - packetSize = _maxPacketSize; + packetSize = _maxSendPacketSize; buf.b.limit(buf.b.position() + packetSize); } @@ -108,7 +112,7 @@ final class TcpTransceiver implements Transceiver // Writing would block, so we reset the limit (if necessary) and return true to indicate // that more data must be sent. // - if(packetSize == _maxPacketSize) + if(packetSize == _maxSendPacketSize) { buf.b.limit(size); } @@ -117,7 +121,7 @@ final class TcpTransceiver implements Transceiver if(_traceLevels.network >= 3) { - String s = "sent " + ret + " of " + size + " bytes via tcp\n" + toString(); + String s = "sent " + ret + " of " + packetSize + " bytes via tcp\n" + toString(); _logger.trace(_traceLevels.networkCat, s); } @@ -126,13 +130,13 @@ final class TcpTransceiver implements Transceiver _stats.bytesSent(type(), ret); } - if(packetSize == _maxPacketSize) + if(packetSize == _maxSendPacketSize) { assert(buf.b.position() == buf.b.limit()); packetSize = size - buf.b.position(); - if(packetSize > _maxPacketSize) + if(packetSize > _maxSendPacketSize) { - packetSize = _maxPacketSize; + packetSize = _maxSendPacketSize; } buf.b.limit(buf.b.position() + packetSize); } @@ -154,11 +158,7 @@ final class TcpTransceiver implements Transceiver public boolean read(Buffer buf, Ice.BooleanHolder moreData) { - int remaining = 0; - if(_traceLevels.network >= 3) - { - remaining = buf.b.remaining(); - } + int packetSize = buf.b.remaining(); moreData.value = false; while(buf.b.hasRemaining()) @@ -182,7 +182,7 @@ final class TcpTransceiver implements Transceiver { if(_traceLevels.network >= 3) { - String s = "received " + ret + " of " + remaining + " bytes via tcp\n" + toString(); + String s = "received " + ret + " of " + packetSize + " bytes via tcp\n" + toString(); _logger.trace(_traceLevels.networkCat, s); } @@ -191,6 +191,8 @@ final class TcpTransceiver implements Transceiver _stats.bytesReceived(type(), ret); } } + + packetSize = buf.b.remaining(); } catch(java.io.InterruptedIOException ex) { @@ -240,7 +242,7 @@ final class TcpTransceiver implements Transceiver _state = connected ? StateConnected : StateNeedConnect; _desc = Network.fdToString(_fd); - _maxPacketSize = 0; + _maxSendPacketSize = 0; if(System.getProperty("os.name").startsWith("Windows")) { // @@ -248,10 +250,10 @@ final class TcpTransceiver implements Transceiver // poor throughput performances when transfering large amount of // data. See Microsoft KB article KB823764. // - _maxPacketSize = Network.getSendBufferSize(_fd) / 2; - if(_maxPacketSize < 512) + _maxSendPacketSize = Network.getSendBufferSize(_fd) / 2; + if(_maxSendPacketSize < 512) { - _maxPacketSize = 0; + _maxSendPacketSize = 0; } } } @@ -271,7 +273,7 @@ final class TcpTransceiver implements Transceiver private Ice.Stats _stats; private String _desc; private int _state; - private int _maxPacketSize; + private int _maxSendPacketSize; private static final int StateNeedConnect = 0; private static final int StateConnectPending = 1; |