# SSLSocketFactory

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Deprecated in[API level 22](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Summary:[Constants](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#constants)\|[Fields](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#lfields)\|[Ctors](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#pubctors)\|[Methods](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#inhmethods)  

# SSLSocketFactory

`
public


class
SSLSocketFactory
`  
`

extends `[Object](https://developer.android.com/reference/java/lang/Object)`


``


implements

`[LayeredSocketFactory](https://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory)`


`

|---|-------------------------------------------|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | org.apache.http.conn.ssl.SSLSocketFactory |

<br />

*** ** * ** ***

<br />

**This class was deprecated in API level 22.**   
Please use[URL.openConnection()](https://developer.android.com/reference/java/net/URL#openConnection())instead. Please visit[this webpage](http://android-developers.blogspot.com/2011/09/androids-http-clients.html)for further details.

Layered socket factory for TLS/SSL connections, based on JSSE. .

SSLSocketFactory can be used to validate the identity of the HTTPS server against a list of trusted certificates and to authenticate to the HTTPS server using a private key.

SSLSocketFactory will enable server authentication when supplied with a[truststore](https://developer.android.com/reference/java/security/KeyStore)file containg one or several trusted certificates. The client secure socket will reject the connection during the SSL session handshake if the target HTTPS server attempts to authenticate itself with a non-trusted certificate.

Use JDK keytool utility to import a trusted certificate and generate a truststore file:  

```
     keytool -import -alias "my server cert" -file server.crt -keystore my.truststore
    
```

<br />

SSLSocketFactory will enable client authentication when supplied with a[keystore](https://developer.android.com/reference/java/security/KeyStore)file containg a private key/public certificate pair. The client secure socket will use the private key to authenticate itself to the target HTTPS server during the SSL session handshake if requested to do so by the server. The target HTTPS server will in its turn verify the certificate presented by the client in order to establish client's authenticity

Use the following sequence of actions to generate a keystore file

- Use JDK keytool utility to generate a new key

  ```
  keytool -genkey -v -alias "my client key" -validity 365 -keystore my.keystore
  ```
  For simplicity use the same password for the key as that of the keystore

  <br />

- Issue a certificate signing request (CSR)

  ```
  keytool -certreq -alias "my client key" -file mycertreq.csr -keystore my.keystore
  ```

  <br />

- Send the certificate request to the trusted Certificate Authority for signature. One may choose to act as their own CA and sign the certificate request using a PKI tool, such as OpenSSL.

- Import the trusted CA root certificate

  ```
  keytool -import -alias "my trusted ca" -file caroot.crt -keystore my.keystore
  ```

  <br />

- Import the PKCS#7 file containg the complete certificate chain

  ```
  keytool -import -alias "my client key" -file mycert.p7 -keystore my.keystore
  ```

  <br />

- Verify the content the resultant keystore file

  ```
  keytool -list -v -keystore my.keystore
  ```

  <br />

<br />

## Summary

|                                                                                ### Constants                                                                                ||
|--------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------|
| [String](https://developer.android.com/reference/java/lang/String) | [SSL](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#SSL) <br />     |
| [String](https://developer.android.com/reference/java/lang/String) | [SSLV2](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#SSLV2) <br /> |
| [String](https://developer.android.com/reference/java/lang/String) | [TLS](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#TLS) <br />     |

|                                                                                                                                                 ### Fields                                                                                                                                                  ||
|--------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` public static final `[X509HostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier) | [ALLOW_ALL_HOSTNAME_VERIFIER](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#ALLOW_ALL_HOSTNAME_VERIFIER) <br />                   |
| ` public static final `[X509HostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier) | [BROWSER_COMPATIBLE_HOSTNAME_VERIFIER](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#BROWSER_COMPATIBLE_HOSTNAME_VERIFIER) <br /> |
| ` public static final `[X509HostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier) | [STRICT_HOSTNAME_VERIFIER](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#STRICT_HOSTNAME_VERIFIER) <br />                         |

|                                                                                                                                                                                                                                                                                                                                                                                                                               ### Public constructors                                                                                                                                                                                                                                                                                                                                                                                                                                ||
|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---|
| ` `[SSLSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#SSLSocketFactory(java.lang.String,%20java.security.KeyStore,%20java.lang.String,%20java.security.KeyStore,%20java.security.SecureRandom,%20org.apache.http.conn.scheme.HostNameResolver))`(`[String](https://developer.android.com/reference/java/lang/String)` algorithm, `[KeyStore](https://developer.android.com/reference/java/security/KeyStore)` keystore, `[String](https://developer.android.com/reference/java/lang/String)` keystorePassword, `[KeyStore](https://developer.android.com/reference/java/security/KeyStore)` truststore, `[SecureRandom](https://developer.android.com/reference/java/security/SecureRandom)` random, `[HostNameResolver](https://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver)` nameResolver) ` |
| ` `[SSLSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#SSLSocketFactory(java.security.KeyStore))`(`[KeyStore](https://developer.android.com/reference/java/security/KeyStore)` truststore) `                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ` `[SSLSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#SSLSocketFactory(java.security.KeyStore,%20java.lang.String))`(`[KeyStore](https://developer.android.com/reference/java/security/KeyStore)` keystore, `[String](https://developer.android.com/reference/java/lang/String)` keystorePassword) `                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ` `[SSLSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#SSLSocketFactory(java.security.KeyStore,%20java.lang.String,%20java.security.KeyStore))`(`[KeyStore](https://developer.android.com/reference/java/security/KeyStore)` keystore, `[String](https://developer.android.com/reference/java/lang/String)` keystorePassword, `[KeyStore](https://developer.android.com/reference/java/security/KeyStore)` truststore) `                                                                                                                                                                                                                                                                                                                                                                                                         |

|                                                                                                                                                                                                                                                                                                                                                                            ### Public methods                                                                                                                                                                                                                                                                                                                                                                             ||
|------------------------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` `[Socket](https://developer.android.com/reference/java/net/Socket)                                             | ` `[connectSocket](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#connectSocket(java.net.Socket,%20java.lang.String,%20int,%20java.net.InetAddress,%20int,%20org.apache.http.params.HttpParams))`(`[Socket](https://developer.android.com/reference/java/net/Socket)` sock, `[String](https://developer.android.com/reference/java/lang/String)` host, int port, `[InetAddress](https://developer.android.com/reference/java/net/InetAddress)` localAddress, int localPort, `[HttpParams](https://developer.android.com/reference/org/apache/http/params/HttpParams)` params) ` Connects a socket to the given host. |
| ` `[Socket](https://developer.android.com/reference/java/net/Socket)                                             | ` `[createSocket](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#createSocket(java.net.Socket,%20java.lang.String,%20int,%20boolean))`(`[Socket](https://developer.android.com/reference/java/net/Socket)` socket, `[String](https://developer.android.com/reference/java/lang/String)` host, int port, boolean autoClose) ` Returns a socket connected to the given host that is layered over an existing socket.                                                                                                                                                                                                   |
| ` `[Socket](https://developer.android.com/reference/java/net/Socket)                                             | ` `[createSocket](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#createSocket())`() ` Creates a new, unconnected socket.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ` `[X509HostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier) | ` `[getHostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#getHostnameVerifier())`() `                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ` static `[SSLSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory)  | ` `[getSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#getSocketFactory())`() ` Gets an singleton instance of the SSLProtocolSocketFactory.                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
| ` boolean`                                                                                                       | ` `[isSecure](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#isSecure(java.net.Socket))`(`[Socket](https://developer.android.com/reference/java/net/Socket)` sock) ` Checks whether a socket connection is secure.                                                                                                                                                                                                                                                                                                                                                                                                   |
| ` void`                                                                                                          | ` `[setHostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#setHostnameVerifier(org.apache.http.conn.ssl.X509HostnameVerifier))`(`[X509HostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier)` hostnameVerifier) `                                                                                                                                                                                                                                                                                                                                     |

| ### Inherited methods |
|-----------------------|---|
| From class` `[java.lang.Object](https://developer.android.com/reference/java/lang/Object)` ` |--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` `[Object](https://developer.android.com/reference/java/lang/Object)          | ` `[clone](https://developer.android.com/reference/java/lang/Object#clone())`() ` Creates and returns a copy of this object.                                                                                                                                                      | | ` boolean`                                                                     | ` `[equals](https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object))`(`[Object](https://developer.android.com/reference/java/lang/Object)` obj) ` Indicates whether some other object is "equal to" this one.                                           | | ` void`                                                                        | ` `[finalize](https://developer.android.com/reference/java/lang/Object#finalize())`() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.                                                          | | ` final `[Class](https://developer.android.com/reference/java/lang/Class)`<?>` | ` `[getClass](https://developer.android.com/reference/java/lang/Object#getClass())`() ` Returns the runtime class of this`Object`.                                                                                                                                                | | ` int`                                                                         | ` `[hashCode](https://developer.android.com/reference/java/lang/Object#hashCode())`() ` Returns a hash code value for the object.                                                                                                                                                 | | ` final void`                                                                  | ` `[notify](https://developer.android.com/reference/java/lang/Object#notify())`() ` Wakes up a single thread that is waiting on this object's monitor.                                                                                                                            | | ` final void`                                                                  | ` `[notifyAll](https://developer.android.com/reference/java/lang/Object#notifyAll())`() ` Wakes up all threads that are waiting on this object's monitor.                                                                                                                         | | ` `[String](https://developer.android.com/reference/java/lang/String)          | ` `[toString](https://developer.android.com/reference/java/lang/Object#toString())`() ` Returns a string representation of the object.                                                                                                                                            | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long,%20int))`(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed. | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long))`(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed.                   | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait())`() ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*.                                                                                             | ||
| From interface` `[org.apache.http.conn.scheme.LayeredSocketFactory](https://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory)` ` |-------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract `[Socket](https://developer.android.com/reference/java/net/Socket) | ` `[createSocket](https://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory#createSocket(java.net.Socket,%20java.lang.String,%20int,%20boolean))`(`[Socket](https://developer.android.com/reference/java/net/Socket)` socket, `[String](https://developer.android.com/reference/java/lang/String)` host, int port, boolean autoClose) ` Returns a socket connected to the given host that is layered over an existing socket. | ||
| From interface` `[org.apache.http.conn.scheme.SocketFactory](https://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory)` ` |-------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` abstract `[Socket](https://developer.android.com/reference/java/net/Socket) | ` `[connectSocket](https://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory#connectSocket(java.net.Socket,%20java.lang.String,%20int,%20java.net.InetAddress,%20int,%20org.apache.http.params.HttpParams))`(`[Socket](https://developer.android.com/reference/java/net/Socket)` sock, `[String](https://developer.android.com/reference/java/lang/String)` host, int port, `[InetAddress](https://developer.android.com/reference/java/net/InetAddress)` localAddress, int localPort, `[HttpParams](https://developer.android.com/reference/org/apache/http/params/HttpParams)` params) ` Connects a socket to the given host. | | ` abstract `[Socket](https://developer.android.com/reference/java/net/Socket) | ` `[createSocket](https://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory#createSocket())`() ` Creates a new, unconnected socket.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | | ` abstract boolean`                                                           | ` `[isSecure](https://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory#isSecure(java.net.Socket))`(`[Socket](https://developer.android.com/reference/java/net/Socket)` sock) ` Checks whether a socket provides a secure connection.                                                                                                                                                                                                                                                                                                                                                                                           | ||

## Constants

### SSL

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final String SSL
```

<br />

<br />

Constant Value: "SSL"  

### SSLV2

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final String SSLV2
```

<br />

<br />

Constant Value: "SSLv2"  

### TLS

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final String TLS
```

<br />

<br />

Constant Value: "TLS"

## Fields

### ALLOW_ALL_HOSTNAME_VERIFIER

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final X509HostnameVerifier ALLOW_ALL_HOSTNAME_VERIFIER
```

<br />

<br />

### BROWSER_COMPATIBLE_HOSTNAME_VERIFIER

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final X509HostnameVerifier BROWSER_COMPATIBLE_HOSTNAME_VERIFIER
```

<br />

<br />

### STRICT_HOSTNAME_VERIFIER

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final X509HostnameVerifier STRICT_HOSTNAME_VERIFIER
```

<br />

<br />

## Public constructors

### SSLSocketFactory

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public SSLSocketFactory (String algorithm, 
                KeyStore keystore, 
                String keystorePassword, 
                KeyStore truststore, 
                SecureRandom random, 
                HostNameResolver nameResolver)
```

<br />

<br />

|                  Parameters                   ||
|--------------------|---------------------------|
| `algorithm`        | `String` <br />           |
| `keystore`         | `KeyStore` <br />         |
| `keystorePassword` | `String` <br />           |
| `truststore`       | `KeyStore` <br />         |
| `random`           | `SecureRandom` <br />     |
| `nameResolver`     | `HostNameResolver` <br /> |

|                                                     Throws                                                      ||
|--------------------------------------------------------------------------------------------------------------|---|
| [KeyManagementException](https://developer.android.com/reference/java/security/KeyManagementException)       |   |
| [KeyStoreException](https://developer.android.com/reference/java/security/KeyStoreException)                 |   |
| [NoSuchAlgorithmException](https://developer.android.com/reference/java/security/NoSuchAlgorithmException)   |   |
| [UnrecoverableKeyException](https://developer.android.com/reference/java/security/UnrecoverableKeyException) |   |

### SSLSocketFactory

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public SSLSocketFactory (KeyStore truststore)
```

<br />

<br />

|           Parameters            ||
|--------------|-------------------|
| `truststore` | `KeyStore` <br /> |

|                                                     Throws                                                      ||
|--------------------------------------------------------------------------------------------------------------|---|
| [KeyManagementException](https://developer.android.com/reference/java/security/KeyManagementException)       |   |
| [KeyStoreException](https://developer.android.com/reference/java/security/KeyStoreException)                 |   |
| [NoSuchAlgorithmException](https://developer.android.com/reference/java/security/NoSuchAlgorithmException)   |   |
| [UnrecoverableKeyException](https://developer.android.com/reference/java/security/UnrecoverableKeyException) |   |

### SSLSocketFactory

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public SSLSocketFactory (KeyStore keystore, 
                String keystorePassword)
```

<br />

<br />

|              Parameters               ||
|--------------------|-------------------|
| `keystore`         | `KeyStore` <br /> |
| `keystorePassword` | `String` <br />   |

|                                                     Throws                                                      ||
|--------------------------------------------------------------------------------------------------------------|---|
| [KeyManagementException](https://developer.android.com/reference/java/security/KeyManagementException)       |   |
| [KeyStoreException](https://developer.android.com/reference/java/security/KeyStoreException)                 |   |
| [NoSuchAlgorithmException](https://developer.android.com/reference/java/security/NoSuchAlgorithmException)   |   |
| [UnrecoverableKeyException](https://developer.android.com/reference/java/security/UnrecoverableKeyException) |   |

### SSLSocketFactory

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public SSLSocketFactory (KeyStore keystore, 
                String keystorePassword, 
                KeyStore truststore)
```

<br />

<br />

|              Parameters               ||
|--------------------|-------------------|
| `keystore`         | `KeyStore` <br /> |
| `keystorePassword` | `String` <br />   |
| `truststore`       | `KeyStore` <br /> |

|                                                     Throws                                                      ||
|--------------------------------------------------------------------------------------------------------------|---|
| [KeyManagementException](https://developer.android.com/reference/java/security/KeyManagementException)       |   |
| [KeyStoreException](https://developer.android.com/reference/java/security/KeyStoreException)                 |   |
| [NoSuchAlgorithmException](https://developer.android.com/reference/java/security/NoSuchAlgorithmException)   |   |
| [UnrecoverableKeyException](https://developer.android.com/reference/java/security/UnrecoverableKeyException) |   |

## Public methods

### connectSocket

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Socket connectSocket (Socket sock, 
                String host, 
                int port, 
                InetAddress localAddress, 
                int localPort, 
                HttpParams params)
```

Connects a socket to the given host.

<br />

|                                                                                                                         Parameters                                                                                                                          ||
|----------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `sock`         | `Socket`: the socket to connect, as obtained from[createSocket](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory#createSocket()).`null`indicates that a new socket should be created and connected. <br /> |
| `host`         | `String`: the host to connect to <br />                                                                                                                                                                                                     |
| `port`         | `int`: the port to connect to on the host <br />                                                                                                                                                                                            |
| `localAddress` | `InetAddress`: the local address to bind the socket to, or`null`for any <br />                                                                                                                                                              |
| `localPort`    | `int`: the port on the local machine, 0 or a negative number for any <br />                                                                                                                                                                 |
| `params`       | `HttpParams`: additional[parameters](https://developer.android.com/reference/org/apache/http/params/HttpParams)for connecting <br />                                                                                                        |

|                                                                                                 Returns                                                                                                  ||
|-------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------|
| [Socket](https://developer.android.com/reference/java/net/Socket) | the connected socket. The returned object may be different from the`sock`argument if this factory supports a layered protocol. <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### createSocket

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Socket createSocket (Socket socket, 
                String host, 
                int port, 
                boolean autoClose)
```

Returns a socket connected to the given host that is layered over an existing socket. Used primarily for creating secure sockets through proxies.

<br />

|                                                Parameters                                                ||
|-------------|---------------------------------------------------------------------------------------------|
| `socket`    | `Socket`: the existing socket <br />                                                        |
| `host`      | `String`: the host name/IP <br />                                                           |
| `port`      | `int`: the port on the host <br />                                                          |
| `autoClose` | `boolean`: a flag for closing the underling socket when the created socket is closed <br /> |

|                                            Returns                                            ||
|-------------------------------------------------------------------|----------------------------|
| [Socket](https://developer.android.com/reference/java/net/Socket) | Socket a new socket <br /> |

|                                              Throws                                              ||
|-----------------------------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException)                    |   |
| [UnknownHostException](https://developer.android.com/reference/java/net/UnknownHostException) |   |

### createSocket

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Socket createSocket ()
```

Creates a new, unconnected socket. The socket should subsequently be passed to[connectSocket](https://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory#connectSocket(java.net.Socket,%20java.lang.String,%20int,%20java.net.InetAddress,%20int,%20org.apache.http.params.HttpParams)).

<br />

|                                        Returns                                         ||
|-------------------------------------------------------------------|---------------------|
| [Socket](https://developer.android.com/reference/java/net/Socket) | a new socket <br /> |

|                                    Throws                                     ||
|----------------------------------------------------------------------------|---|
| [IOException](https://developer.android.com/reference/java/io/IOException) |   |

### getHostnameVerifier

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public X509HostnameVerifier getHostnameVerifier ()
```

<br />

<br />

|                                                        Returns                                                        ||
|---------------------------------------------------------------------------------------------------------------|--------|
| [X509HostnameVerifier](https://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier) | <br /> |

### getSocketFactory

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static SSLSocketFactory getSocketFactory ()
```

Gets an singleton instance of the SSLProtocolSocketFactory.

<br />

|                                                                 Returns                                                                  ||
|-------------------------------------------------------------------------------------------------------|-----------------------------------|
| [SSLSocketFactory](https://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory) | a SSLProtocolSocketFactory <br /> |

### isSecure

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public boolean isSecure (Socket sock)
```

Checks whether a socket connection is secure. This factory creates TLS/SSL socket connections which, by default, are considered secure.  
Derived classes may override this method to perform runtime checks, for example based on the cypher suite.

<br />

|                  Parameters                   ||
|--------|---------------------------------------|
| `sock` | `Socket`: the connected socket <br /> |

|         Returns          ||
|-----------|---------------|
| `boolean` | `true` <br /> |

|                                                               Throws                                                               ||
|--------------------------------------------------------------------------------------------------------|----------------------------|
| [IllegalArgumentException](https://developer.android.com/reference/java/lang/IllegalArgumentException) | if the argument is invalid |

### setHostnameVerifier

Added in[API level 1](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void setHostnameVerifier (X509HostnameVerifier hostnameVerifier)
```

<br />

<br />

|                    Parameters                     ||
|--------------------|-------------------------------|
| `hostnameVerifier` | `X509HostnameVerifier` <br /> |