AnsweredAssumed Answered

Connection closed with error when switching Data-Wifi

Question asked by Iñaki Malerba on Apr 28, 2015
Latest reply on Oct 7, 2016 by Mattia

Hi there !

 

I'm using Smack 4.1.0 on android. I can send and recieve everything with no problem, but if the phone switches from Wifi to Data or Data to Wifi the connection gets lost.

 

This is the Exception:


04-28 10:18:35.237    1221-1276/com.e0.chat D/SMACK﹕ XMPPConnection closed due to an exception (0)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:592)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at libcore.io.IoBridge.recvfrom(IoBridge.java:556)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at java.io.InputStreamReader.read(InputStreamReader.java:231)
04-28 10:18:35.237    1221-1276/com.e0.chat W/System.err﹕ at java.io.BufferedReader.read(BufferedReader.java:325)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.jivesoftware.smack.util.ObservableReader.read(ObservableReader.java:41)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1515)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.kxml2.io.KXmlParser.peekType(KXmlParser.java:992)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.kxml2.io.KXmlParser.next(KXmlParser.java:349)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1151)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ Caused by: android.system.ErrnoException: recvfrom failed: ETIMEDOUT (Connection timed out)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at libcore.io.Posix.recvfromBytes(Native Method)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at libcore.io.Posix.recvfrom(Posix.java:161)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ at libcore.io.IoBridge.recvfrom(IoBridge.java:553)
04-28 10:18:35.242    1221-1276/com.e0.chat W/System.err﹕ ... 14 more

 

I tried using eJabberd and Prosody. In both I had the same problem.

Already tried enabling/desabling StreamManagement in Android and nothing changed.

 

Trace of exchanged elements:

04-28 10:18:12.482    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <stream:stream xmlns='jabber:client' to='localhost' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='user@localhost' xml:lang='en'>
04-28 10:18:14.332    1221-1276/com.e0.chat D/SMACK﹕ RECV (0): <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='localhost' id='9db93977-6dd2-4d93-9195-f852c1ee8e90' xml:lang='en' xmlns='jabber:client'><stream:features><mechanisms xmlns='urn:ietf:params:xml:ns:xmpp-sasl'><mechanism>SCRAM-SHA-1</mechanism><mechanism>DIGEST-MD5</mechanism></mechanisms></stream:features>
04-28 10:18:14.342    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl' mechanism='SCRAM-SHA-1'>biwsbj11c2VyLHI9al9RdGp3I1hbdXE5aC48bFN1Xmsge3lMPi8zQCp1Zy0=</auth>
04-28 10:18:15.072    1221-1221/com.e0.chat I/Timeline﹕ Timeline: Activity_idle id: android.os.BinderProxy@15cdd1a4 time:68067213
04-28 10:18:16.157    1221-1276/com.e0.chat D/SMACK﹕ RECV (0): <challenge xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>cj1qX1F0ancjWFt1cTloLjxsU3VeayB7eUw+LzNAKnVnLWYxMjRhMmU0LWJjNzctNDEzOC05YmNhLTU5ZDQ3NTY0MDM2OSxzPU5EUmtaRGd6TldVdE1tVTJaaTAwWW1FMkxXRmlaVEF0TURreVpUQXdOREl4WW1ZNSxpPTQwOTY=</challenge>
04-28 10:18:16.557    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>Yz1iaXdzLHI9al9RdGp3I1hbdXE5aC48bFN1Xmsge3lMPi8zQCp1Zy1mMTI0YTJlNC1iYzc3LTQxMzgtOWJjYS01OWQ0NzU2NDAzNjkscD1zOVloWitBYW96WDNhZytKTlh3d2k5WjUyTFE9</response>
04-28 10:18:16.927    1221-1276/com.e0.chat D/SMACK﹕ RECV (0): <success xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>dj1mMUZGTFMyTG15WStLZjN6M0ZTVDZzN2c0UkE9</success>
04-28 10:18:16.932    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <stream:stream xmlns='jabber:client' to='localhost' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='user@localhost' id='9db93977-6dd2-4d93-9195-f852c1ee8e90' xml:lang='en'>
04-28 10:18:17.132    1221-1276/com.e0.chat D/SMACK﹕ RECV (0): <?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='localhost' id='420a3e3c-3061-496f-999c-acb62ff8b73d' xml:lang='en' xmlns='jabber:client'><stream:features><c hash='sha-1' ver='ZBWApSGFMsTZkuVThHtyU5xv1Mk=' node='http://prosody.im' xmlns='http://jabber.org/protocol/caps'/><ver xmlns='urn:xmpp:features:rosterver'/><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><required/></bind><session xmlns='urn:ietf:params:xml:ns:xmpp-session'><optional/></session></stream:features>
04-28 10:18:17.137    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <iq id='rwE4r-3' type='set'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><resource>localhost</resource></bind></iq>
04-28 10:18:17.207    1221-1276/com.e0.chat D/SMACK﹕ RECV (0): <iq id='rwE4r-3' type='result'><bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'><jid>user@localhost/localhost</jid></bind></iq>
04-28 10:18:17.217    1221-1242/com.e0.chat D/SMACK﹕ User logged (0): user@localhost:5222/localhost
04-28 10:18:17.227    1221-1242/com.e0.chat D/SMACK﹕ XMPPConnection authenticated (0)
04-28 10:18:17.227    1221-1242/com.e0.chat I/System.out﹕ ##########################################################
04-28 10:18:17.227    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <iq id='rwE4r-5' type='get'><query xmlns='jabber:iq:roster'></query></iq>
04-28 10:18:17.232    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <presence id='rwE4r-6'><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='NfJ3flI83zSdUDzCEICtbypursw='/></presence>
04-28 10:18:17.242    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <message to='admin@localhost' id='rwE4r-8' type='chat'><body>Howdy!</body><thread>6c23f0fc-b30f-474f-97e6-4114ccc5df7b</thread></message>
04-28 10:18:17.247    1221-1275/com.e0.chat D/SMACK﹕ SENT (0): <message to='admin@localhost' id='rwE4r-9' type='chat'><body>ASDASDASDASD</body><thread>6c23f0fc-b30f-474f-97e6-4114ccc5df7b</thread></message>
04-28 10:18:17.422    1221-1276/com.e0.chat D/SMACK﹕ RECV (0): <iq id='rwE4r-5' type='result' to='user@localhost/localhost'><query ver='1' xmlns='jabber:iq:roster'/></iq><presence id='rwE4r-6' from='user@localhost/localhost'><c hash='sha-1' ver='NfJ3flI83zSdUDzCEICtbypursw=' node='http://www.igniterealtime.org/projects/smack' xmlns='http://jabber.org/protocol/caps'/></presence>
04-28 10:18:32.082    1221-1221/com.e0.chat E/Sulod sa network reciever﹕ Sulod sa network reciever
04-28 10:18:35.142    1221-1276/com.e0.chat W/AbstractXMPPConnection﹕ Connection closed with error
    java.net.SocketException: recvfrom failed: ETIMEDOUT (Connection timed out)
            at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:592)
            at libcore.io.IoBridge.recvfrom(IoBridge.java:556)
            at java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)
            at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
            at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
            at java.io.InputStreamReader.read(InputStreamReader.java:231)
            at java.io.BufferedReader.read(BufferedReader.java:325)
            at org.jivesoftware.smack.util.ObservableReader.read(ObservableReader.java:41)
            at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1515)
            at org.kxml2.io.KXmlParser.peekType(KXmlParser.java:992)
            at org.kxml2.io.KXmlParser.next(KXmlParser.java:349)
            at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1151)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: android.system.ErrnoException: recvfrom failed: ETIMEDOUT (Connection timed out)
            at libcore.io.Posix.recvfromBytes(Native Method)
            at libcore.io.Posix.recvfrom(Posix.java:161)
            at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:250)
            at libcore.io.IoBridge.recvfrom(IoBridge.java:553)
            at java.net.PlainSocketImpl.read(PlainSocketImpl.java:485)
            at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:37)
            at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:237)
            at java.io.InputStreamReader.read(InputStreamReader.java:231)
            at java.io.BufferedReader.read(BufferedReader.java:325)
            at org.jivesoftware.smack.util.ObservableReader.read(ObservableReader.java:41)
            at org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1515)
            at org.kxml2.io.KXmlParser.peekType(KXmlParser.java:992)
            at org.kxml2.io.KXmlParser.next(KXmlParser.java:349)
            at org.kxml2.io.KXmlParser.next(KXmlParser.java:313)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1151)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$200(XMPPTCPConnection.java:937)
            at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:952)
            at java.lang.Thread.run(Thread.java:818)

 

 

Code where the connection is done:

                SmackConfiguration.DEBUG = true;
                XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();


                configBuilder.setUsernameAndPassword("user", "user");
                configBuilder.setServiceName("localhost");
                configBuilder.setHost(host);
                configBuilder.setPort(5222);
                //configBuilder.setSendPresence(true);


                //configBuilder.setCompressionEnabled(true);
                configBuilder.setResource("localhost");
                configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);


                connection = new XMPPTCPConnection(configBuilder.build());
               // XMPPTCPConnection.setUseStreamManagement(true);
                connection.setUseStreamManagement(false);
                connection.setUseStreamManagementResumption(false);
                // Connect to the server
                try {
                    connection.connect();
                } catch (SmackException e) {

                    Log.d(Smack", "except");
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.d("IOE", "except");
                    e.printStackTrace();
                } catch (XMPPException e) {
                    Log.d("XMPP", "except");
                    e.printStackTrace();
                }
                // Log into the server
                try {
                    connection.login();
                    System.out.println("##########################################################");
                    Chat chat = ChatManager.getInstanceFor(connection).createChat("admin@localhost", new ChatMessageListener() {
                        @Override
                        public void processMessage(Chat chat, Message message) {
                            // Print out any messages we get back to standard out.
                            System.out.println("Received message: " + message);
                        }
                    });
                    Message me = new Message();
                    chat.sendMessage("Howdy!");
                    chat.sendMessage("ASDASDASDASD");

                } catch (XMPPException e) {
                    Log.d("XMPP", "except");
                    e.printStackTrace();
                } catch (SmackException e) {
                    Log.d("Smack", "except");
                    e.printStackTrace();
                } catch (IOException e) {
                    Log.d("IO", "except");
                    e.printStackTrace();
                }

 

 

I hope you can help me. Thanks !

Outcomes