|
19 | 19 |
|
20 | 20 | package org.elasticsearch.nio;
|
21 | 21 |
|
| 22 | +import org.elasticsearch.common.CheckedRunnable; |
| 23 | + |
22 | 24 | import java.io.Closeable;
|
23 | 25 | import java.io.IOException;
|
24 | 26 | import java.io.UncheckedIOException;
|
25 | 27 | import java.net.InetSocketAddress;
|
| 28 | +import java.net.SocketException; |
26 | 29 | import java.nio.channels.ServerSocketChannel;
|
27 | 30 | import java.nio.channels.SocketChannel;
|
28 | 31 | import java.security.AccessController;
|
@@ -206,17 +209,30 @@ ServerSocketChannel openNioServerSocketChannel(InetSocketAddress address) throws
|
206 | 209 | return serverSocketChannel;
|
207 | 210 | }
|
208 | 211 |
|
| 212 | + private static final boolean MAC_OS_X = System.getProperty("os.name").startsWith("Mac OS X"); |
| 213 | + |
| 214 | + private static void setSocketOption(CheckedRunnable<SocketException> runnable) throws SocketException { |
| 215 | + try { |
| 216 | + runnable.run(); |
| 217 | + } catch (SocketException e) { |
| 218 | + if (MAC_OS_X == false) { |
| 219 | + // ignore on Mac, see https://github.com/elastic/elasticsearch/issues/41071 |
| 220 | + throw e; |
| 221 | + } |
| 222 | + } |
| 223 | + } |
| 224 | + |
209 | 225 | private void configureSocketChannel(SocketChannel channel) throws IOException {
|
210 | 226 | channel.configureBlocking(false);
|
211 | 227 | java.net.Socket socket = channel.socket();
|
212 |
| - socket.setTcpNoDelay(tcpNoDelay); |
213 |
| - socket.setKeepAlive(tcpKeepAlive); |
214 |
| - socket.setReuseAddress(tcpReusedAddress); |
| 228 | + setSocketOption(() -> socket.setTcpNoDelay(tcpNoDelay)); |
| 229 | + setSocketOption(() -> socket.setKeepAlive(tcpKeepAlive)); |
| 230 | + setSocketOption(() -> socket.setReuseAddress(tcpReusedAddress)); |
215 | 231 | if (tcpSendBufferSize > 0) {
|
216 |
| - socket.setSendBufferSize(tcpSendBufferSize); |
| 232 | + setSocketOption(() -> socket.setSendBufferSize(tcpSendBufferSize)); |
217 | 233 | }
|
218 | 234 | if (tcpReceiveBufferSize > 0) {
|
219 |
| - socket.setSendBufferSize(tcpReceiveBufferSize); |
| 235 | + setSocketOption(() -> socket.setSendBufferSize(tcpReceiveBufferSize)); |
220 | 236 | }
|
221 | 237 | }
|
222 | 238 |
|
|
0 commit comments