Author: fhanik Date: Tue Oct 24 07:46:13 2006 New Revision: 467349 URL: http://svn.apache.org/viewvc?view=rev&rev=467349 Log: Add a socket properties class so that we can configure every single socket option, currently only on NIO. Remove redundant byte[] buffer in the NIO OutputBuffer, this avoids double copy from byte[] to byte[] to ByteBuffer Add in the ability to configure the selector pool, as this be dependent on JVM and OS settings
Added: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketProperties.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java?view=diff&rev=467349&r1=467348&r2=467349 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProcessor.java Tue Oct 24 07:46:13 2006 @@ -83,7 +83,7 @@ // ----------------------------------------------------------- Constructors - public Http11NioProcessor(int headerBufferSize, NioEndpoint endpoint) { + public Http11NioProcessor(int rxBufSize, int txBufSize, NioEndpoint endpoint) { this.endpoint = endpoint; @@ -95,12 +95,12 @@ readTimeout = timeout; //readTimeout = -1; } - inputBuffer = new InternalNioInputBuffer(request, headerBufferSize,readTimeout); + inputBuffer = new InternalNioInputBuffer(request, rxBufSize,readTimeout); request.setInputBuffer(inputBuffer); response = new Response(); response.setHook(this); - outputBuffer = new InternalNioOutputBuffer(response, headerBufferSize,readTimeout); + outputBuffer = new InternalNioOutputBuffer(response, txBufSize,readTimeout); response.setOutputBuffer(outputBuffer); request.setResponse(response); @@ -1004,8 +1004,9 @@ return; // Validate and write response headers - prepareResponse(); + try { + prepareResponse(); outputBuffer.commit(); } catch (IOException e) { // Set error flag @@ -1552,7 +1553,7 @@ * When committing the response, we have to validate the set of headers, as * well as setup the response filters. */ - protected void prepareResponse() { + protected void prepareResponse() throws IOException { boolean entityBody = true; contentDelimitation = false; Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java?view=diff&rev=467349&r1=467348&r2=467349 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/Http11NioProtocol.java Tue Oct 24 07:46:13 2006 @@ -93,6 +93,9 @@ * Set a property. */ public void setProperty(String name, String value) { + if ( name!=null && (name.startsWith("socket.") ||name.startsWith("selectorPool.")) ){ + ep.setProperty(name, value); + } setAttribute(name, value); } @@ -119,13 +122,14 @@ public void init() throws Exception { ep.setName(getName()); ep.setHandler(cHandler); - ep.setReadBufSize(getMaxHttpHeaderSize()); - ep.setWriteBufSize(getMaxHttpHeaderSize()); + + //todo, determine if we even need these + ep.getSocketProperties().setRxBufSize(Math.max(ep.getSocketProperties().getRxBufSize(),getMaxHttpHeaderSize())); + ep.getSocketProperties().setTxBufSize(Math.max(ep.getSocketProperties().getTxBufSize(),getMaxHttpHeaderSize())); + try { ep.init(); - sslImplementation = SSLImplementation.getInstance("org.apache.tomcat.util.net.jsse.JSSEImplementation"); - } catch (Exception ex) { log.error(sm.getString("http11protocol.endpoint.initerror"), ex); throw ex; @@ -209,6 +213,7 @@ private int socketCloseDelay=-1; private boolean disableUploadTimeout = true; private int socketBuffer = 9000; + private Adapter adapter; private Http11ConnectionHandler cHandler; @@ -297,24 +302,6 @@ setAttribute("firstReadTimeout", "" + i); } - public int getPollTime() { - return ep.getPollTime(); - } - - public void setPollTime( int i ) { - ep.setPollTime(i); - setAttribute("pollTime", "" + i); - } - - public void setPollerSize(int i) { - ep.setPollerSize(i); - setAttribute("pollerSize", "" + i); - } - - public int getPollerSize() { - return ep.getPollerSize(); - } - public InetAddress getAddress() { return ep.getAddress(); } @@ -667,7 +654,10 @@ } public Http11NioProcessor createProcessor() { - Http11NioProcessor processor = new Http11NioProcessor(proto.maxHttpHeaderSize, proto.ep); + Http11NioProcessor processor = new Http11NioProcessor( + Math.max(proto.maxHttpHeaderSize,proto.ep.getSocketProperties().getRxBufSize()), + Math.max(proto.maxHttpHeaderSize,proto.ep.getSocketProperties().getRxBufSize()), + proto.ep); processor.setAdapter(proto.adapter); processor.setMaxKeepAliveRequests(proto.maxKeepAliveRequests); processor.setTimeout(proto.timeout); Modified: tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java?view=diff&rev=467349&r1=467348&r2=467349 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/coyote/http11/InternalNioOutputBuffer.java Tue Oct 24 07:46:13 2006 @@ -69,15 +69,8 @@ this.response = response; headers = response.getMimeHeaders(); - buf = new byte[headerBufferSize]; + //buf = new byte[headerBufferSize]; - if (headerBufferSize < (8 * 1024)) { - bbufLimit = 6 * 1500; - } else { - bbufLimit = (headerBufferSize / 1500 + 1) * 1500; - } - //bbuf = ByteBuffer.allocateDirect(bbufLimit); - outputStreamOutputBuffer = new SocketOutputBuffer(); filterLibrary = new OutputFilter[0]; @@ -135,7 +128,7 @@ /** * Pointer to the current write buffer. */ - protected byte[] buf; + //protected byte[] buf; /** @@ -447,11 +440,12 @@ /** * Send the response status line. */ - public void sendStatus() { + public void sendStatus() throws IOException { // Write protocol name write(Constants.HTTP_11_BYTES); - buf[pos++] = Constants.SP; + addToBB(Constants.SP); + pos++; // Write status code int status = response.getStatus(); @@ -469,7 +463,8 @@ write(status); } - buf[pos++] = Constants.SP; + addToBB(Constants.SP); + pos++; // Write message String message = response.getMessage(); @@ -480,8 +475,10 @@ } // End the response status line - buf[pos++] = Constants.CR; - buf[pos++] = Constants.LF; + addToBB(Constants.CR); + pos++; + addToBB(Constants.LF); + pos++; } @@ -492,14 +489,18 @@ * @param name Header name * @param value Header value */ - public void sendHeader(MessageBytes name, MessageBytes value) { + public void sendHeader(MessageBytes name, MessageBytes value) throws IOException { write(name); - buf[pos++] = Constants.COLON; - buf[pos++] = Constants.SP; + addToBB(Constants.COLON); + pos++; + addToBB(Constants.SP); + pos++; write(value); - buf[pos++] = Constants.CR; - buf[pos++] = Constants.LF; + addToBB(Constants.CR); + pos++; + addToBB(Constants.LF); + pos++; } @@ -510,15 +511,18 @@ * @param name Header name * @param value Header value */ - public void sendHeader(ByteChunk name, ByteChunk value) { + public void sendHeader(ByteChunk name, ByteChunk value) throws IOException { write(name); - buf[pos++] = Constants.COLON; - buf[pos++] = Constants.SP; + addToBB(Constants.COLON); + pos++; + addToBB(Constants.SP); + pos++; write(value); - buf[pos++] = Constants.CR; - buf[pos++] = Constants.LF; - + addToBB(Constants.CR); + pos++; + addToBB(Constants.LF); + pos++; } @@ -531,11 +535,16 @@ public void sendHeader(String name, String value) { write(name); - buf[pos++] = Constants.COLON; - buf[pos++] = Constants.SP; + addToBB(Constants.COLON); + pos++; + addToBB(Constants.SP); + pos++; write(value); - buf[pos++] = Constants.CR; - buf[pos++] = Constants.LF; + addToBB(Constants.CR); + pos++; + addToBB(Constants.LF); + pos++; + } @@ -545,8 +554,10 @@ */ public void endHeaders() { - buf[pos++] = Constants.CR; - buf[pos++] = Constants.LF; + addToBB(Constants.CR); + pos++; + addToBB(Constants.LF); + pos++; } @@ -598,17 +609,28 @@ if (pos > 0) { // Sending the response header buffer - addToBB(buf, 0, pos); + //flushBuffer();//do we need this? } } int total = 0; + private void addToBB(byte b) { + ByteBuffer bytebuffer = socket.getBufHandler().getWriteBuffer(); + final int length = 1; + if (bytebuffer.remaining() <= length) { + try { flushBuffer();} catch (IOException x) {throw new RuntimeException(x);} + } + bytebuffer.put(b); + total += length; + } + private void addToBB(byte[] buf, int offset, int length) throws IOException { - if (socket.getBufHandler().getWriteBuffer().capacity() <= (offset + length)) { + ByteBuffer bytebuffer = socket.getBufHandler().getWriteBuffer(); + if (bytebuffer.remaining() <= length) { flushBuffer(); } - socket.getBufHandler().getWriteBuffer().put(buf, offset, length); + bytebuffer.put(buf, offset, length); total += length; } @@ -620,7 +642,7 @@ * * @param mb data to be written */ - protected void write(MessageBytes mb) { + protected void write(MessageBytes mb) throws IOException { if (mb.getType() == MessageBytes.T_BYTES) { ByteChunk bc = mb.getByteChunk(); @@ -642,11 +664,10 @@ * * @param bc data to be written */ - protected void write(ByteChunk bc) { + protected void write(ByteChunk bc) throws IOException{ // Writing the byte chunk to the output buffer - System.arraycopy(bc.getBytes(), bc.getStart(), buf, pos, - bc.getLength()); + addToBB(bc.getBytes(), bc.getStart(),bc.getLength()); pos = pos + bc.getLength(); } @@ -675,7 +696,8 @@ } else if (c == 127) { c = ' '; } - buf[pos++] = (byte) c; + addToBB((byte) c); + pos++; } } @@ -688,10 +710,10 @@ * * @param b data to be written */ - public void write(byte[] b) { + public void write(byte[] b) throws IOException { // Writing the byte chunk to the output buffer - System.arraycopy(b, 0, buf, pos, b.length); + addToBB(b,0,b.length); pos = pos + b.length; } @@ -722,7 +744,8 @@ } else if (c == 127) { c = ' '; } - buf[pos++] = (byte) c; + addToBB((byte) c); + pos++; } } Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java?view=diff&rev=467349&r1=467348&r2=467349 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioEndpoint.java Tue Oct 24 07:46:13 2006 @@ -29,6 +29,7 @@ import java.nio.channels.ServerSocketChannel; import java.nio.channels.SocketChannel; import java.security.KeyStore; +import java.util.HashMap; import java.util.Iterator; import java.util.Set; import java.util.StringTokenizer; @@ -42,6 +43,7 @@ import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; +import org.apache.tomcat.util.IntrospectionUtils; import org.apache.tomcat.util.net.SecureNioChannel.ApplicationBufferHandler; import org.apache.tomcat.util.res.StringManager; @@ -137,12 +139,8 @@ * Sequence number used to generate thread names. */ protected int sequence = 0; - - - protected int readBufSize = 8192; - protected int writeBufSize = 8192; - protected NioSelectorPool selectorPool = new NioSelectorPool();; + protected NioSelectorPool selectorPool = new NioSelectorPool(); /** * Server socket "pointer". @@ -188,15 +186,6 @@ /** - * Size of the socket poller. - */ - protected int pollerSize = 8 * 1024; - public void setPollerSize(int pollerSize) { this.pollerSize = pollerSize; } - public int getPollerSize() { return pollerSize; } - - - - /** * Server socket port. */ protected int port; @@ -229,29 +218,30 @@ public void setBacklog(int backlog) { if (backlog > 0) this.backlog = backlog; } public int getBacklog() { return backlog; } + protected SocketProperties socketProperties = new SocketProperties(); /** * Socket TCP no delay. */ - protected boolean tcpNoDelay = false; - public boolean getTcpNoDelay() { return tcpNoDelay; } - public void setTcpNoDelay(boolean tcpNoDelay) { this.tcpNoDelay = tcpNoDelay; } + public boolean getTcpNoDelay() { return socketProperties.getTcpNoDelay();} + public void setTcpNoDelay(boolean tcpNoDelay) { socketProperties.setTcpNoDelay(tcpNoDelay); } /** * Socket linger. */ - protected int soLinger = 100; - public int getSoLinger() { return soLinger; } - public void setSoLinger(int soLinger) { this.soLinger = soLinger; } + public int getSoLinger() { return socketProperties.getSoLingerTime(); } + public void setSoLinger(int soLinger) { + socketProperties.setSoLingerTime(soLinger); + socketProperties.setSoLingerOn(soLinger>=0); + } /** * Socket timeout. */ - protected int soTimeout = -1; - public int getSoTimeout() { return soTimeout; } - public void setSoTimeout(int soTimeout) { this.soTimeout = soTimeout; } + public int getSoTimeout() { return socketProperties.getSoTimeout(); } + public void setSoTimeout(int soTimeout) { socketProperties.setSoTimeout(soTimeout); } /** @@ -263,15 +253,6 @@ /** - * Poll interval, in microseconds. The smaller the value, the more CPU the poller - * will use, but the more responsive to activity it will be. - */ - protected int pollTime = 2000; - public int getPollTime() { return pollTime; } - public void setPollTime(int pollTime) { if (pollTime > 0) { this.pollTime = pollTime; } } - - - /** * The default is true - the created threads will be * in daemon mode. If set to false, the control thread * will not be daemon - and will keep the process alive. @@ -348,6 +329,24 @@ * Dummy minSpareThreads property. */ public int getMinSpareThreads() { return Math.min(getMaxThreads(),5); } + + /** + * Generic properties, introspected + */ + public void setProperty(String name, String value) { + final String selectorPoolName = "selectorPool."; + final String socketName = "socket."; + try { + if (name.startsWith(selectorPoolName)) { + IntrospectionUtils.setProperty(selectorPool, name.substring(selectorPoolName.length()), value); + } else if (name.startsWith(socketName)) { + IntrospectionUtils.setProperty(socketProperties, name.substring(socketName.length()), value); + } + }catch ( Exception x ) { + log.error("Unable to set attribute \""+name+"\" to \""+value+"\"",x); + } + } + // -------------------- SSL related properties -------------------- protected String keystoreFile = System.getProperty("user.home")+"/.keystore"; @@ -411,18 +410,14 @@ public boolean getSecure() { return secure;} public void setSecure(boolean b) { secure = b;} - public void setWriteBufSize(int writeBufSize) { - this.writeBufSize = writeBufSize; - } - - public void setReadBufSize(int readBufSize) { - this.readBufSize = readBufSize; - } - public void setSelectorPool(NioSelectorPool selectorPool) { this.selectorPool = selectorPool; } + public void setSocketProperties(SocketProperties socketProperties) { + this.socketProperties = socketProperties; + } + protected SSLContext sslContext = null; public SSLContext getSSLContext() { return sslContext;} public void setSSLContext(SSLContext c) { sslContext = c;} @@ -553,10 +548,6 @@ running = true; paused = false; - selectorPool.setMaxSelectors(maxThreads); - selectorPool.setMaxSpareSelectors(-1); - selectorPool.open(); - // Create worker collection if (executor == null) { workers = new WorkerStack(maxThreads); @@ -619,7 +610,6 @@ } pollers = null; } - try {selectorPool.close();}catch (IOException x){} nioChannels.clear(); } @@ -652,17 +642,21 @@ } public int getWriteBufSize() { - return writeBufSize; + return socketProperties.getTxBufSize(); } public int getReadBufSize() { - return readBufSize; + return socketProperties.getRxBufSize(); } public NioSelectorPool getSelectorPool() { return selectorPool; } + public SocketProperties getSocketProperties() { + return socketProperties; + } + /** * Unlock the server socket accept using a bogus connection. */ @@ -704,13 +698,7 @@ //disable blocking, APR style, we are gonna be polling it socket.configureBlocking(false); Socket sock = socket.socket(); - // 1: Set socket options: timeout, linger, etc - if (soLinger >= 0) - sock.setSoLinger(true,soLinger); - if (tcpNoDelay) - sock.setTcpNoDelay(true); - if (soTimeout > 0) - sock.setSoTimeout(soTimeout); + socketProperties.setProperties(sock); NioChannel channel = nioChannels.poll(); if ( channel == null ) { @@ -720,11 +708,15 @@ if (sslContext != null) { SSLEngine engine = createSSLEngine(); int appbufsize = engine.getSession().getApplicationBufferSize(); - int bufsize = Math.max(Math.max(getReadBufSize(), getWriteBufSize()), appbufsize); - NioBufferHandler bufhandler = new NioBufferHandler(bufsize, bufsize); + NioBufferHandler bufhandler = new NioBufferHandler(Math.max(appbufsize,getReadBufSize()), + Math.max(appbufsize,getWriteBufSize()), + socketProperties.getDirectBuffer()); channel = new SecureNioChannel(socket, engine, bufhandler, selectorPool); } else { - NioBufferHandler bufhandler = new NioBufferHandler(getReadBufSize(), getWriteBufSize()); + NioBufferHandler bufhandler = new NioBufferHandler(getReadBufSize(), + getWriteBufSize(), + socketProperties.getDirectBuffer()); + channel = new NioChannel(socket, bufhandler); } } else { @@ -1172,7 +1164,7 @@ //don't process timeouts too frequently, but if the selector simply timed out //then we can check timeouts to avoid gaps if ( (now < nextExpiration) && (keyCount>0 || hasEvents) ) return; - nextExpiration = now + (long)soTimeout; + nextExpiration = now + (long)socketProperties.getSoTimeout(); //timeout Set<SelectionKey> keys = selector.keys(); for (Iterator<SelectionKey> iter = keys.iterator(); iter.hasNext(); ) { @@ -1186,7 +1178,7 @@ }else if ((ka.interestOps()&SelectionKey.OP_READ) == SelectionKey.OP_READ) { //only timeout sockets that we are waiting for a read from long delta = now - ka.getLastAccess(); - long timeout = (ka.getTimeout()==-1)?((long) soTimeout):(ka.getTimeout()); + long timeout = (ka.getTimeout()==-1)?((long) socketProperties.getSoTimeout()):(ka.getTimeout()); boolean isTimedout = delta > timeout; if (isTimedout) { cancelledKey(key, SocketStatus.TIMEOUT); @@ -1449,11 +1441,14 @@ protected ByteBuffer readbuf = null; protected ByteBuffer writebuf = null; - public NioBufferHandler(int readsize, int writesize) { - readbuf = ByteBuffer.allocateDirect(readsize); - writebuf = ByteBuffer.allocateDirect(writesize); -// readbuf = ByteBuffer.allocate(readsize); -// writebuf = ByteBuffer.allocate(writesize); + public NioBufferHandler(int readsize, int writesize, boolean direct) { + if ( direct ) { + readbuf = ByteBuffer.allocateDirect(readsize); + writebuf = ByteBuffer.allocateDirect(writesize); + }else { + readbuf = ByteBuffer.allocate(readsize); + writebuf = ByteBuffer.allocate(writesize); + } } public ByteBuffer expand(ByteBuffer buffer, int remaining) {return buffer;} Modified: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java?view=diff&rev=467349&r1=467348&r2=467349 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java (original) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/NioSelectorPool.java Tue Oct 24 07:46:13 2006 @@ -46,7 +46,7 @@ public Selector get() throws IOException{ if ( (!enabled) || active.incrementAndGet() >= maxSelectors ) { - active.decrementAndGet(); + if ( enabled ) active.decrementAndGet(); return null; } Selector s = null; @@ -66,7 +66,7 @@ public void put(Selector s) throws IOException { - active.decrementAndGet(); + if ( enabled ) active.decrementAndGet(); if ( enabled && (maxSpareSelectors==-1 || spare.get() < Math.min(maxSpareSelectors,maxSelectors)) ) { spare.incrementAndGet(); selectors.offer(s); @@ -79,6 +79,7 @@ Selector s; while ( (s = selectors.poll()) != null ) s.close(); spare.set(0); + active.set(0); } public void open(){ @@ -125,12 +126,14 @@ }//while if ( timedout ) throw new SocketTimeoutException(); } finally { - if (key != null) key.cancel(); - if (selector != null) selector.selectNow(); + if (key != null) { + key.cancel(); + if (selector != null) selector.selectNow();//removes the key from this selector + } } return written; } - + /** * Performs a blocking read using the bytebuffer for data to be read and a selector to block. * If the <code>selector</code> parameter is null, then it will perform a busy read that could @@ -168,8 +171,10 @@ }//while if ( timedout ) throw new SocketTimeoutException(); } finally { - if (key != null) key.cancel(); - if (selector != null) selector.selectNow(); + if (key != null) { + key.cancel(); + if (selector != null) selector.selectNow();//removes the key from this selector + } } return read; } Added: tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketProperties.java URL: http://svn.apache.org/viewvc/tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketProperties.java?view=auto&rev=467349 ============================================================================== --- tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketProperties.java (added) +++ tomcat/tc6.0.x/trunk/java/org/apache/tomcat/util/net/SocketProperties.java Tue Oct 24 07:46:13 2006 @@ -0,0 +1,152 @@ +package org.apache.tomcat.util.net; + +import java.net.Socket; +import java.net.SocketException; + +public class SocketProperties { + protected boolean directBuffer = true; + protected int rxBufSize = 25188; + protected int txBufSize = 43800; + protected boolean tcpNoDelay = false; + protected boolean soKeepAlive = false; + protected boolean ooBInline = true; + protected boolean soReuseAddress = true; + protected boolean soLingerOn = true; + protected int soLingerTime = 10; + protected int soTimeout = 5000; + protected int soTrafficClass = 0x04 | 0x08 | 0x010; + protected int performanceConnectionTime = 1; + protected int performanceLatency = 1; + protected int performanceBandwidth = 1; + private Socket properties; + + public void setProperties(Socket socket) throws SocketException{ + socket.setReceiveBufferSize(rxBufSize); + socket.setSendBufferSize(txBufSize); + socket.setOOBInline(ooBInline); + socket.setKeepAlive(soKeepAlive); + socket.setPerformancePreferences(performanceConnectionTime,performanceLatency,performanceBandwidth); + socket.setReuseAddress(soReuseAddress); + socket.setSoLinger(soLingerOn,soLingerTime); + socket.setSoTimeout(soTimeout); + socket.setTcpNoDelay(tcpNoDelay); + socket.setTrafficClass(soTrafficClass); + } + + public boolean getDirectBuffer() { + return directBuffer; + } + + public boolean getOoBInline() { + return ooBInline; + } + + public int getPerformanceBandwidth() { + return performanceBandwidth; + } + + public int getPerformanceConnectionTime() { + return performanceConnectionTime; + } + + public int getPerformanceLatency() { + return performanceLatency; + } + + public Socket getProperties() { + return properties; + } + + public int getRxBufSize() { + return rxBufSize; + } + + public boolean getSoKeepAlive() { + return soKeepAlive; + } + + public boolean getSoLingerOn() { + return soLingerOn; + } + + public int getSoLingerTime() { + return soLingerTime; + } + + public boolean getSoReuseAddress() { + return soReuseAddress; + } + + public int getSoTimeout() { + return soTimeout; + } + + public int getSoTrafficClass() { + return soTrafficClass; + } + + public boolean getTcpNoDelay() { + return tcpNoDelay; + } + + public int getTxBufSize() { + return txBufSize; + } + + public void setPerformanceConnectionTime(int performanceConnectionTime) { + this.performanceConnectionTime = performanceConnectionTime; + } + + public void setTxBufSize(int txBufSize) { + this.txBufSize = txBufSize; + } + + public void setTcpNoDelay(boolean tcpNoDelay) { + this.tcpNoDelay = tcpNoDelay; + } + + public void setSoTrafficClass(int soTrafficClass) { + this.soTrafficClass = soTrafficClass; + } + + public void setSoTimeout(int soTimeout) { + this.soTimeout = soTimeout; + } + + public void setSoReuseAddress(boolean soReuseAddress) { + this.soReuseAddress = soReuseAddress; + } + + public void setSoLingerTime(int soLingerTime) { + this.soLingerTime = soLingerTime; + } + + public void setSoKeepAlive(boolean soKeepAlive) { + this.soKeepAlive = soKeepAlive; + } + + public void setRxBufSize(int rxBufSize) { + this.rxBufSize = rxBufSize; + } + + public void setPerformanceLatency(int performanceLatency) { + this.performanceLatency = performanceLatency; + } + + public void setPerformanceBandwidth(int performanceBandwidth) { + this.performanceBandwidth = performanceBandwidth; + } + + public void setOoBInline(boolean ooBInline) { + this.ooBInline = ooBInline; + } + + public void setDirectBuffer(boolean directBuffer) { + this.directBuffer = directBuffer; + } + + public void setSoLingerOn(boolean soLingerOn) { + this.soLingerOn = soLingerOn; + } + +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]