private Socket getNewSocket() throws SocketException, IOException { if (IMMEDIATELY_DOWNED_HOSTS.contains(this.hostname)) { sleepMillisForProperty(this.props, "connectTimeout"); throw new SocketTimeoutException(); } String hostnameToConnectTo = MAPPED_HOSTS.get(this.hostname); if (hostnameToConnectTo == null) { hostnameToConnectTo = this.hostname; } if (NonRegisteringDriver.isHostPropertiesList(hostnameToConnectTo)) { Properties hostSpecificProps = NonRegisteringDriver.expandHostKeyValues(hostnameToConnectTo); String protocol = hostSpecificProps.getProperty(NonRegisteringDriver.PROTOCOL_PROPERTY_KEY); if ("unix".equalsIgnoreCase(protocol)) { SocketFactory factory; try { factory = (SocketFactory) Class.forName("org.newsclub.net.mysql.AFUNIXDatabaseSocketFactory").newInstance(); } catch (InstantiationException e) { throw new SocketException(e.getMessage()); } catch (IllegalAccessException e) { throw new SocketException(e.getMessage()); } catch (ClassNotFoundException e) { throw new SocketException(e.getMessage()); } String path = hostSpecificProps.getProperty(NonRegisteringDriver.PATH_PROPERTY_KEY); if (path != null) { hostSpecificProps.setProperty("junixsocket.file", path); } return new HangingSocket( factory.connect(hostnameToConnectTo, this.portNumber, hostSpecificProps), this.props, this.hostname); } } return new HangingSocket( super.connect(hostnameToConnectTo, this.portNumber, this.props), this.props, this.hostname); }