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 * https://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 io.netty.channel.socket; 17 18 import io.netty.buffer.ByteBufAllocator; 19 import io.netty.channel.ChannelConfig; 20 import io.netty.channel.ChannelOption; 21 import io.netty.channel.MessageSizeEstimator; 22 import io.netty.channel.RecvByteBufAllocator; 23 import io.netty.channel.WriteBufferWaterMark; 24 25 import java.net.Socket; 26 import java.net.StandardSocketOptions; 27 28 /** 29 * A {@link ChannelConfig} for a {@link SocketChannel}. 30 * 31 * <h3>Available options</h3> 32 * 33 * In addition to the options provided by {@link DuplexChannelConfig}, 34 * {@link SocketChannelConfig} allows the following options in the option map: 35 * 36 * <table border="1" cellspacing="0" cellpadding="6"> 37 * <tr> 38 * <th>Name</th><th>Associated setter method</th> 39 * </tr><tr> 40 * <td>{@link ChannelOption#SO_KEEPALIVE}</td><td>{@link #setKeepAlive(boolean)}</td> 41 * </tr><tr> 42 * <td>{@link ChannelOption#SO_REUSEADDR}</td><td>{@link #setReuseAddress(boolean)}</td> 43 * </tr><tr> 44 * <td>{@link ChannelOption#SO_LINGER}</td><td>{@link #setSoLinger(int)}</td> 45 * </tr><tr> 46 * <td>{@link ChannelOption#TCP_NODELAY}</td><td>{@link #setTcpNoDelay(boolean)}</td> 47 * </tr><tr> 48 * <td>{@link ChannelOption#SO_RCVBUF}</td><td>{@link #setReceiveBufferSize(int)}</td> 49 * </tr><tr> 50 * <td>{@link ChannelOption#SO_SNDBUF}</td><td>{@link #setSendBufferSize(int)}</td> 51 * </tr><tr> 52 * <td>{@link ChannelOption#IP_TOS}</td><td>{@link #setTrafficClass(int)}</td> 53 * </tr><tr> 54 * <td>{@link ChannelOption#ALLOW_HALF_CLOSURE}</td><td>{@link #setAllowHalfClosure(boolean)}</td> 55 * </tr> 56 * </table> 57 */ 58 public interface SocketChannelConfig extends DuplexChannelConfig { 59 60 /** 61 * Gets the {@link StandardSocketOptions#TCP_NODELAY} option. Please note that the default value of this option 62 * is {@code true} unlike the operating system default ({@code false}). However, for some buggy platforms, such as 63 * Android, that shows erratic behavior with Nagle's algorithm disabled, the default value remains to be 64 * {@code false}. 65 */ 66 boolean isTcpNoDelay(); 67 68 /** 69 * Sets the {@link StandardSocketOptions#TCP_NODELAY} option. Please note that the default value of this option 70 * is {@code true} unlike the operating system default ({@code false}). However, for some buggy platforms, such as 71 * Android, that shows erratic behavior with Nagle's algorithm disabled, the default value remains to be 72 * {@code false}. 73 */ 74 SocketChannelConfig setTcpNoDelay(boolean tcpNoDelay); 75 76 /** 77 * Gets the {@link StandardSocketOptions#SO_LINGER} option. 78 */ 79 int getSoLinger(); 80 81 /** 82 * Sets the {@link StandardSocketOptions#SO_LINGER} option. 83 */ 84 SocketChannelConfig setSoLinger(int soLinger); 85 86 /** 87 * Gets the {@link StandardSocketOptions#SO_SNDBUF} option. 88 */ 89 int getSendBufferSize(); 90 91 /** 92 * Sets the {@link StandardSocketOptions#SO_SNDBUF} option. 93 */ 94 SocketChannelConfig setSendBufferSize(int sendBufferSize); 95 96 /** 97 * Gets the {@link StandardSocketOptions#SO_RCVBUF} option. 98 */ 99 int getReceiveBufferSize(); 100 101 /** 102 * Sets the {@link StandardSocketOptions#SO_RCVBUF} option. 103 */ 104 SocketChannelConfig setReceiveBufferSize(int receiveBufferSize); 105 106 /** 107 * Gets the {@link StandardSocketOptions#SO_KEEPALIVE} option. 108 */ 109 boolean isKeepAlive(); 110 111 /** 112 * Sets the {@link StandardSocketOptions#SO_KEEPALIVE} option. 113 */ 114 SocketChannelConfig setKeepAlive(boolean keepAlive); 115 116 /** 117 * Gets the {@link StandardSocketOptions#IP_TOS} option. 118 */ 119 int getTrafficClass(); 120 121 /** 122 * Sets the {@link StandardSocketOptions#IP_TOS} option. 123 */ 124 SocketChannelConfig setTrafficClass(int trafficClass); 125 126 /** 127 * Gets the {@link StandardSocketOptions#SO_REUSEADDR} option. 128 */ 129 boolean isReuseAddress(); 130 131 /** 132 * Sets the {@link StandardSocketOptions#SO_REUSEADDR} option. 133 */ 134 SocketChannelConfig setReuseAddress(boolean reuseAddress); 135 136 /** 137 * Sets the performance preferences as specified in 138 * {@link Socket#setPerformancePreferences(int, int, int)}. 139 */ 140 SocketChannelConfig setPerformancePreferences(int connectionTime, int latency, int bandwidth); 141 142 @Override 143 SocketChannelConfig setAllowHalfClosure(boolean allowHalfClosure); 144 145 @Override 146 SocketChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis); 147 148 @Override 149 @Deprecated 150 SocketChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead); 151 152 @Override 153 SocketChannelConfig setWriteSpinCount(int writeSpinCount); 154 155 @Override 156 SocketChannelConfig setAllocator(ByteBufAllocator allocator); 157 158 @Override 159 SocketChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator); 160 161 @Override 162 SocketChannelConfig setAutoRead(boolean autoRead); 163 164 @Override 165 SocketChannelConfig setAutoClose(boolean autoClose); 166 167 @Override 168 SocketChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator); 169 170 @Override 171 SocketChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark); 172 }