docs: @Override
      public java.net.Socket createSocket(InetAddress host, int port) throws IOException {
          if (tc.isEntryEnabled())
              Tr.entry(tc, "createSocket", new Object[] { host, Integer.valueOf(port) });
          javax.net.ssl.SSLSocketFactory factory = default_factory;
          javax.net.ssl.SSLSocket socket = null;
  
          // use the props set from the constructor
          java.util.Properties sslprops = props;
  
          try {
              String remoteHostName = null;
              final InetAddress host_final = host;
              final Integer port_final = Integer.valueOf(port);
              if (host_final != null) {
                  remoteHostName = AccessController.doPrivileged(new PrivilegedAction<String>() {
                      @Override
                      public String run() {
                          String remoteHost = null;
                          try {
                              remoteHost = host_final.getHostName();
  
                              if (remoteHost == null)
                                  remoteHost = host_final.getCanonicalHostName();
                              return remoteHost;
                          } catch (Throwable e) {
                              remoteHost = host_final.getHostAddress();
                              if (tc.isDebugEnabled())
                                  Tr.debug(tc, "Exception getting hostname from socket.", new Object[] { e });
                              FFDCFilter.processException(e, getClass().getName(), "checkClientTrusted", this, new Object[] { host_final, port_final });
                              return remoteHost;
                          }
                      }
                  });
              }
  
              java.util.Map<String, Object> connectionInfo = new HashMap<String, Object>();
              connectionInfo.put(Constants.CONNECTION_INFO_DIRECTION, Constants.DIRECTION_OUTBOUND);
              connectionInfo.put(Constants.CONNECTION_INFO_REMOTE_HOST, remoteHostName);
              connectionInfo.put(Constants.CONNECTION_INFO_REMOTE_PORT, Integer.toString(port));
  
              if (default_constructor) {
                  sslprops = getProperties(null, connectionInfo, null);
              }
  
              if (sslprops != null)
                  factory = getSSLSocketFactory(connectionInfo, sslprops);
  
          } catch (Exception e) {
              if (tc.isDebugEnabled())
                  Tr.debug(tc, "Exception getting SSLSocketFactory.", new Object[] { e });
              FFDCFilter.processException(e, getClass().getName(), "createSocket", this, new Object[] { host, port });
          }
  
          if (factory != null) {
              socket = (javax.net.ssl.SSLSocket) factory.createSocket(host, port);
              socket = SSLConfigManager.getInstance().setCipherListOnSocket(sslprops, socket);
          } else
              throw new javax.net.ssl.SSLException("SSLSocketFactory is null. This can occur if javax.net.ssl.SSLSocketFactory.getDefault() is called to create a socket and javax.net.ssl.* properties are not set.");
  
          if (tc.isEntryEnabled())
              Tr.exit(tc, "createSocket");
          return socket;
      }