Android Socket.io client v1.0.0 – EngineIOException: xhr poll error

On Android socket client

Error:

io.socket.engineio.client.EngineIOException: xhr poll error
cause: java.net.SocketTimeoutException: timeout

=> By pass ssl, https, addition write timeout to http client

public static Socket initialSocket (String token) {
    try {
        if (socket == null) {


            HostnameVerifier myHostnameVerifier = (hostname, session) -> true;
            SSLContext mySSLContext = SSLContext.getInstance("TLS");
            TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
                public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                    return new java.security.cert.X509Certificate[]{};
                }


                public void checkClientTrusted(X509Certificate[] chain,
                                               String authType) {
                }


                public void checkServerTrusted(X509Certificate[] chain,
                                               String authType) {
                }
            }};
            mySSLContext.init(null, trustAllCerts, new java.security.SecureRandom());


            OkHttpClient.Builder clientBuilder = new OkHttpClient.Builder()
                    .retryOnConnectionFailure(true)
                    .connectTimeout(5, TimeUnit.MINUTES) // connect timeout
                    .writeTimeout(5, TimeUnit.MINUTES) // write timeout
                    .readTimeout(5, TimeUnit.MINUTES)// read timeout
                    .connectionPool(new ConnectionPool(0, 1, TimeUnit.NANOSECONDS))
                    .hostnameVerifier(myHostnameVerifier)
                    .sslSocketFactory(mySSLContext.getSocketFactory(), new X509TrustManager() {
                        @Override
                        public void checkClientTrusted(X509Certificate[] chain, String authType) {


                        }


                        @Override
                        public void checkServerTrusted(X509Certificate[] chain, String authType) {


                        }


                        @Override
                        public X509Certificate[] getAcceptedIssuers() {
                            return new X509Certificate[0];
                        }
                    });
            OkHttpClient okHttpClient = clientBuilder.build();


            IO.setDefaultOkHttpCallFactory(okHttpClient);
            IO.setDefaultOkHttpWebSocketFactory(okHttpClient);
            IO.Options opts = new IO.Options();
            opts.forceNew = true;
            opts.callFactory = okHttpClient;
            opts.webSocketFactory = okHttpClient;
            opts.query = "token=" + token;
            socket = IO.socket(ApiUrls.SOCKET_URL, opts);
        }
        return socket;
    } catch (URISyntaxException e) {
        throw new RuntimeException(e);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } catch (KeyManagementException e) {
        e.printStackTrace();
    }
    socket = null;
    return null;
} 

Check config proxy pass header on Nginx server

/etc/nginx/sites-available/mysite

upstream nodes {
  # enable sticky session based on IP
  ip_hash;
  # Backend nodejs server
  server 127.0.0.1:5500;
}


server {
  listen 80;
  # The host name to respond to
  server_name mysite.com;


  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $host;


    proxy_pass http://nodes;


    # enable WebSockets
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
} 

Leave a Reply

Your email address will not be published.Required fields are marked *