1 /* 2 * Copyright 2012 The Netty Project 3 * 4 * The Netty Project licenses this file to you under the Apache License, 5 * version 2.0 (the "License"); you may not use this file except in compliance 6 * with the License. You may obtain a copy of the License at: 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 12 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 13 * License for the specific language governing permissions and limitations 14 * under the License. 15 */ 16 package org.jboss.netty.channel.socket.nio; 17 18 import java.nio.ByteBuffer; 19 import java.nio.channels.WritableByteChannel; 20 21 import org.jboss.netty.channel.Channel; 22 import org.jboss.netty.channel.ChannelConfig; 23 24 /** 25 * Special {@link ChannelConfig} sub-type which offers extra methods which are useful for NIO. 26 * 27 */ 28 public interface NioChannelConfig extends ChannelConfig { 29 30 /** 31 * Returns the high water mark of the write buffer. If the number of bytes 32 * queued in the write buffer exceeds this value, {@link Channel#isWritable()} 33 * will start to return {@code false}. 34 */ 35 int getWriteBufferHighWaterMark(); 36 37 /** 38 * Sets the high water mark of the write buffer. If the number of bytes 39 * queued in the write buffer exceeds this value, {@link Channel#isWritable()} 40 * will start to return {@code false}. 41 */ 42 void setWriteBufferHighWaterMark(int writeBufferHighWaterMark); 43 44 /** 45 * Returns the low water mark of the write buffer. Once the number of bytes 46 * queued in the write buffer exceeded the 47 * {@linkplain #setWriteBufferHighWaterMark(int) high water mark} and then 48 * dropped down below this value, {@link Channel#isWritable()} will start to return 49 * {@code true} again. 50 */ 51 int getWriteBufferLowWaterMark(); 52 53 /** 54 * Sets the low water mark of the write buffer. Once the number of bytes 55 * queued in the write buffer exceeded the 56 * {@linkplain #setWriteBufferHighWaterMark(int) high water mark} and then 57 * dropped down below this value, {@link Channel#isWritable()} will start toreturn 58 * {@code true} again. 59 */ 60 void setWriteBufferLowWaterMark(int writeBufferLowWaterMark); 61 62 /** 63 * Returns the maximum loop count for a write operation until 64 * {@link WritableByteChannel#write(ByteBuffer)} returns a non-zero value. 65 * It is similar to what a spin lock is used for in concurrency programming. 66 * It improves memory utilization and write throughput depending on 67 * the platform that JVM runs on. The default value is {@code 16}. 68 */ 69 int getWriteSpinCount(); 70 71 /** 72 * Sets the maximum loop count for a write operation until 73 * {@link WritableByteChannel#write(ByteBuffer)} returns a non-zero value. 74 * It is similar to what a spin lock is used for in concurrency programming. 75 * It improves memory utilization and write throughput depending on 76 * the platform that JVM runs on. The default value is {@code 16}. 77 * 78 * @throws IllegalArgumentException 79 * if the specified value is {@code 0} or less than {@code 0} 80 */ 81 void setWriteSpinCount(int writeSpinCount); 82 }