private IOUtils() {
}
+ public static Charset getConsoleCharset() {
+ final var console = System.console();
+ return console == null ? Charset.defaultCharset() : console.charset();
+ }
+
public static String readAll(InputStream in, Charset charset) throws IOException {
var output = new StringWriter();
var buffer = new byte[4096];
public static InetSocketAddress parseInetSocketAddress(final String tcpAddress) throws UserErrorException {
final var colonIndex = tcpAddress.lastIndexOf(':');
if (colonIndex < 0) {
- throw new UserErrorException("Invalid tcp bind address: " + tcpAddress);
+ throw new UserErrorException("Invalid tcp bind address (expected host:port): " + tcpAddress);
}
- final String host = tcpAddress.substring(0, colonIndex);
+ final var host = tcpAddress.substring(0, colonIndex);
+ final var portString = tcpAddress.substring(colonIndex + 1);
+
final int port;
try {
- port = Integer.parseInt(tcpAddress.substring(colonIndex + 1));
+ port = Integer.parseInt(portString);
} catch (NumberFormatException e) {
- throw new UserErrorException("Invalid tcp bind address: " + tcpAddress, e);
+ throw new UserErrorException("Invalid tcp port: " + portString, e);
+ }
+ final var socketAddress = new InetSocketAddress(host, port);
+ if (socketAddress.isUnresolved()) {
+ throw new UserErrorException("Invalid tcp bind address, invalid host: " + host);
}
- return new InetSocketAddress(host, port);
+ return socketAddress;
}
public static UnixDomainPrincipal getUnixDomainPrincipal(final SocketChannel channel) throws IOException {
logger.info("Listening on socket: " + address);
postBind(address);
} catch (IOException e) {
- throw new IOErrorException("Failed to bind socket: " + e.getMessage(), e);
+ throw new IOErrorException("Failed to bind socket " + address + ": " + e.getMessage(), e);
}
return serverChannel;
}