211 throw new UnsupportedOperationException("'" + name + "' not supported");
212
213 try {
214 begin();
215 if (name == StandardSocketOptions.SO_REUSEADDR &&
216 Net.useExclusiveBind())
217 {
218 // SO_REUSEADDR emulated when using exclusive bind
219 return (T)Boolean.valueOf(isReuseAddress);
220 }
221 return (T) Net.getSocketOption(fd, Net.UNSPEC, name);
222 } finally {
223 end();
224 }
225 }
226
227 private static class DefaultOptionsHolder {
228 static final Set<SocketOption<?>> defaultOptions = defaultOptions();
229
230 private static Set<SocketOption<?>> defaultOptions() {
231 HashSet<SocketOption<?>> set = new HashSet<SocketOption<?>>(2);
232 set.add(StandardSocketOptions.SO_RCVBUF);
233 set.add(StandardSocketOptions.SO_REUSEADDR);
234 return Collections.unmodifiableSet(set);
235 }
236 }
237
238 @Override
239 public final Set<SocketOption<?>> supportedOptions() {
240 return DefaultOptionsHolder.defaultOptions;
241 }
242
243 @Override
244 public final String toString() {
245 StringBuilder sb = new StringBuilder();
246 sb.append(this.getClass().getName());
247 sb.append('[');
248 if (!isOpen())
249 sb.append("closed");
250 else {
251 if (localAddress == null) {
|
211 throw new UnsupportedOperationException("'" + name + "' not supported");
212
213 try {
214 begin();
215 if (name == StandardSocketOptions.SO_REUSEADDR &&
216 Net.useExclusiveBind())
217 {
218 // SO_REUSEADDR emulated when using exclusive bind
219 return (T)Boolean.valueOf(isReuseAddress);
220 }
221 return (T) Net.getSocketOption(fd, Net.UNSPEC, name);
222 } finally {
223 end();
224 }
225 }
226
227 private static class DefaultOptionsHolder {
228 static final Set<SocketOption<?>> defaultOptions = defaultOptions();
229
230 private static Set<SocketOption<?>> defaultOptions() {
231 HashSet<SocketOption<?>> set = new HashSet<>(2);
232 set.add(StandardSocketOptions.SO_RCVBUF);
233 set.add(StandardSocketOptions.SO_REUSEADDR);
234 return Collections.unmodifiableSet(set);
235 }
236 }
237
238 @Override
239 public final Set<SocketOption<?>> supportedOptions() {
240 return DefaultOptionsHolder.defaultOptions;
241 }
242
243 @Override
244 public final String toString() {
245 StringBuilder sb = new StringBuilder();
246 sb.append(this.getClass().getName());
247 sb.append('[');
248 if (!isOpen())
249 sb.append("closed");
250 else {
251 if (localAddress == null) {
|