// Bind and start to accept incoming connections.
InetAddress hostAddressX;
try {
hostAddressX = networkService.resolveBindHostAddress(bindHost);
} catch (IOException e) {
throw new BindHttpException("Failed to resolve host [" + bindHost + "]", e);
}
final InetAddress hostAddress = hostAddressX;
// Fail if host address is a public IP but only on-site networking is allowed.
if (onsiteonly) {
if (hostAddress == null || (!hostAddress.isLoopbackAddress()
&& !hostAddress.isLinkLocalAddress()
&& !hostAddress.isSiteLocalAddress())) {
throw new ElasticsearchException("Bind host " + bindHost
+ (hostAddress != null ? "(address " + hostAddress + ") " : "")
+ "is not on-site and not permitted by default. Check 'websocket.onsiteonly' setting in configuration.");
}
}
PortsRange portsRange = new PortsRange(port);
final AtomicReference<Exception> lastException = new AtomicReference();
boolean success = portsRange.iterate(new PortsRange.PortCallback() {
@Override
public boolean onPortNumber(int portNumber) {
try {
serverChannel = serverBootstrap.bind(new InetSocketAddress(hostAddress, portNumber));
} catch (Exception e) {
lastException.set(e);
return false;
}
return true;
}
});
if (!success) {
throw new BindHttpException("Failed to bind to [" + port + "]", lastException.get());
}
InetSocketAddress boundAddress = (InetSocketAddress) serverChannel.getLocalAddress();
InetSocketAddress publishAddress;
try {
publishAddress = new InetSocketAddress(networkService.resolvePublishHostAddress(publishHost), boundAddress.getPort());