I/O error during system call, Connection reset by peer I/O error during system call, Connection reset by peer android android

I/O error during system call, Connection reset by peer


I was having a similar SSL error. Turns out Pre-lollipop devices do not support SSL TLSv1.1, TLSv1.2. I fixed it by including a TLSSocketFactory wrapper class that enables these SSL protocols. Try adding the following to your code:

    static {    final SSLSocketFactory sslSocketFactory;    try {        sslSocketFactory = new TLSSocketFactory();        HttpsURLConnection.setDefaultSSLSocketFactory(sslSocketFactory);    } catch (KeyManagementException ignored) {    } catch (NoSuchAlgorithmException e) {        e.printStackTrace();    }}

import java.io.IOException;import java.net.InetAddress;import java.net.Socket;import java.net.UnknownHostException;import java.security.KeyManagementException;import java.security.NoSuchAlgorithmException;import javax.net.ssl.SSLContext;import javax.net.ssl.SSLSocket;import javax.net.ssl.SSLSocketFactory;/** * @author fkrauthan * http://blog.dev-area.net/2015/08/13/android-4-1-enable-tls-1-1-and-tls-1-2/ * *// IMPORTANT: Pre-lollipop devices do not support SSL TLSv1.1, TLSv1.2// so I've included a TLSSocketFactory wrapper class that enables these SSL// protocols. */public class TLSSocketFactory extends SSLSocketFactory {    private SSLSocketFactory internalSSLSocketFactory;    public TLSSocketFactory() throws KeyManagementException, NoSuchAlgorithmException {        SSLContext context = SSLContext.getInstance("TLS");        context.init(null, null, null);        internalSSLSocketFactory = context.getSocketFactory();    }    @Override    public String[] getDefaultCipherSuites() {        return internalSSLSocketFactory.getDefaultCipherSuites();    }    @Override    public String[] getSupportedCipherSuites() {        return internalSSLSocketFactory.getSupportedCipherSuites();    }    @Override    public Socket createSocket(Socket s, String host, int port, boolean autoClose) throws IOException {        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(s, host, port, autoClose));    }    @Override    public Socket createSocket(String host, int port) throws IOException, UnknownHostException {        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));    }    @Override    public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port, localHost, localPort));    }    @Override    public Socket createSocket(InetAddress host, int port) throws IOException {        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(host, port));    }    @Override    public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {        return enableTLSOnSocket(internalSSLSocketFactory.createSocket(address, port, localAddress, localPort));    }    private Socket enableTLSOnSocket(Socket socket) {        if(socket != null && (socket instanceof SSLSocket)) {            ((SSLSocket)socket).setEnabledProtocols(new String[] {"TLSv1.1", "TLSv1.2"});        }        return socket;    }}