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.InetAddress; 26 import java.net.NetworkInterface; 27 import java.net.StandardSocketOptions; 28 29 /** 30 * A {@link ChannelConfig} for a {@link DatagramChannel}. 31 * 32 * <h3>Available options</h3> 33 * 34 * In addition to the options provided by {@link ChannelConfig}, 35 * {@link DatagramChannelConfig} allows the following options in the option map: 36 * 37 * <table border="1" cellspacing="0" cellpadding="6"> 38 * <tr> 39 * <th>Name</th><th>Associated setter method</th> 40 * </tr><tr> 41 * <td>{@link ChannelOption#SO_BROADCAST}</td><td>{@link #setBroadcast(boolean)}</td> 42 * </tr><tr> 43 * <td>{@link ChannelOption#IP_MULTICAST_ADDR}</td><td>{@link #setInterface(InetAddress)}</td> 44 * </tr><tr> 45 * <td>{@link ChannelOption#IP_MULTICAST_LOOP_DISABLED}</td> 46 * <td>{@link #setLoopbackModeDisabled(boolean)}</td> 47 * </tr><tr> 48 * <td>{@link ChannelOption#IP_MULTICAST_IF}</td> 49 * <td>{@link #setNetworkInterface(NetworkInterface)}</td> 50 * </tr><tr> 51 * <td>{@link ChannelOption#SO_REUSEADDR}</td><td>{@link #setReuseAddress(boolean)}</td> 52 * </tr><tr> 53 * <td>{@link ChannelOption#SO_RCVBUF}</td><td>{@link #setReceiveBufferSize(int)}</td> 54 * </tr><tr> 55 * <td>{@link ChannelOption#SO_SNDBUF}</td><td>{@link #setSendBufferSize(int)}</td> 56 * </tr><tr> 57 * <td>{@link ChannelOption#IP_MULTICAST_TTL}</td><td>{@link #setTimeToLive(int)}</td> 58 * </tr><tr> 59 * <td>{@link ChannelOption#IP_TOS}</td><td>{@link #setTrafficClass(int)}</td> 60 * </tr> 61 * </table> 62 */ 63 public interface DatagramChannelConfig extends ChannelConfig { 64 65 /** 66 * Gets the {@link StandardSocketOptions#SO_SNDBUF} option. 67 */ 68 int getSendBufferSize(); 69 70 /** 71 * Sets the {@link StandardSocketOptions#SO_SNDBUF} option. 72 */ 73 DatagramChannelConfig setSendBufferSize(int sendBufferSize); 74 75 /** 76 * Gets the {@link StandardSocketOptions#SO_RCVBUF} option. 77 */ 78 int getReceiveBufferSize(); 79 80 /** 81 * Sets the {@link StandardSocketOptions#SO_RCVBUF} option. 82 */ 83 DatagramChannelConfig setReceiveBufferSize(int receiveBufferSize); 84 85 /** 86 * Gets the {@link StandardSocketOptions#IP_TOS} option. 87 */ 88 int getTrafficClass(); 89 90 /** 91 * Sets the {@link StandardSocketOptions#IP_TOS} option. 92 */ 93 DatagramChannelConfig setTrafficClass(int trafficClass); 94 95 /** 96 * Gets the {@link StandardSocketOptions#SO_REUSEADDR} option. 97 */ 98 boolean isReuseAddress(); 99 100 /** 101 * Gets the {@link StandardSocketOptions#SO_REUSEADDR} option. 102 */ 103 DatagramChannelConfig setReuseAddress(boolean reuseAddress); 104 105 /** 106 * Gets the {@link StandardSocketOptions#SO_BROADCAST} option. 107 */ 108 boolean isBroadcast(); 109 110 /** 111 * Sets the {@link StandardSocketOptions#SO_BROADCAST} option. 112 */ 113 DatagramChannelConfig setBroadcast(boolean broadcast); 114 115 /** 116 * Gets the {@link StandardSocketOptions#IP_MULTICAST_LOOP} option. 117 * 118 * @return {@code true} if and only if the loopback mode has been disabled 119 */ 120 boolean isLoopbackModeDisabled(); 121 122 /** 123 * Sets the {@link StandardSocketOptions#IP_MULTICAST_LOOP} option. 124 * 125 * @param loopbackModeDisabled 126 * {@code true} if and only if the loopback mode has been disabled 127 */ 128 DatagramChannelConfig setLoopbackModeDisabled(boolean loopbackModeDisabled); 129 130 /** 131 * Gets the {@link StandardSocketOptions#IP_MULTICAST_TTL} option. 132 */ 133 int getTimeToLive(); 134 135 /** 136 * Sets the {@link StandardSocketOptions#IP_MULTICAST_TTL} option. 137 */ 138 DatagramChannelConfig setTimeToLive(int ttl); 139 140 /** 141 * Gets the address of the network interface used for multicast packets. 142 */ 143 InetAddress getInterface(); 144 145 /** 146 * Sets the address of the network interface used for multicast packets. 147 */ 148 DatagramChannelConfig setInterface(InetAddress interfaceAddress); 149 150 /** 151 * Gets the {@link StandardSocketOptions#IP_MULTICAST_IF} option. 152 */ 153 NetworkInterface getNetworkInterface(); 154 155 /** 156 * Sets the {@link StandardSocketOptions#IP_MULTICAST_IF} option. 157 */ 158 DatagramChannelConfig setNetworkInterface(NetworkInterface networkInterface); 159 160 @Override 161 @Deprecated 162 DatagramChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead); 163 164 @Override 165 DatagramChannelConfig setWriteSpinCount(int writeSpinCount); 166 167 @Override 168 DatagramChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis); 169 170 @Override 171 DatagramChannelConfig setAllocator(ByteBufAllocator allocator); 172 173 @Override 174 DatagramChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator); 175 176 @Override 177 DatagramChannelConfig setAutoRead(boolean autoRead); 178 179 @Override 180 DatagramChannelConfig setAutoClose(boolean autoClose); 181 182 @Override 183 DatagramChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator); 184 185 @Override 186 DatagramChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark); 187 188 }