Smack: aTalk is experiencing a long pause in start up the stream login process after XMPPConnection#connect() is called

The thread dump shows one thread of particular interest:

"Thread-13@25212" daemon prio=5 tid=0xcd nid=NA runnable
  java.lang.Thread.State: RUNNABLE
	  at libcore.io.Linux.poll(Linux.java:-1)
	  at libcore.io.ForwardingOs.poll(ForwardingOs.java:577)
	  at libcore.io.BlockGuardOs.poll(BlockGuardOs.java:282)
	  at libcore.io.ForwardingOs.poll(ForwardingOs.java:577)
	  at libcore.io.IoBridge.isConnected(IoBridge.java:328)
	  at libcore.io.IoBridge.connectErrno(IoBridge.java:238)
	  at libcore.io.IoBridge.connect(IoBridge.java:180)
	  at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
	  at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
	  - locked <0x641a> (a java.net.SocksSocketImpl)
	  at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
	  at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
	  at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
	  at java.net.Socket.connect(Socket.java:621)
	  at org.minidns.source.NetworkDataSource.queryTcp(NetworkDataSource.java:116)
	  at org.minidns.source.NetworkDataSource.query(NetworkDataSource.java:76)
	  at org.minidns.source.NetworkDataSource.query(NetworkDataSource.java:34)
	  at org.minidns.AbstractDnsClient.query(AbstractDnsClient.java:250)
	  at org.minidns.AbstractDnsClient.query(AbstractDnsClient.java:360)
	  at org.minidns.DnsClient.query(DnsClient.java:157)
	  at org.minidns.iterative.ReliableDnsClient.query(ReliableDnsClient.java:99)
	  at org.minidns.AbstractDnsClient.query(AbstractDnsClient.java:188)
	  at org.minidns.hla.ResolverApi.resolve(ResolverApi.java:118)
	  at org.minidns.hla.ResolverApi.resolve(ResolverApi.java:114)
	  at org.jivesoftware.smack.util.dns.minidns.MiniDnsResolver.lookupHostAddress0(MiniDnsResolver.java:106)
	  at org.jivesoftware.smack.util.dns.DNSResolver.lookupHostAddress(DNSResolver.java:67)
	  at org.jivesoftware.smack.tcp.rce.RemoteXmppTcpConnectionEndpoints.resolveDomain(RemoteXmppTcpConnectionEndpoints.java:217)
	  at org.jivesoftware.smack.tcp.rce.RemoteXmppTcpConnectionEndpoints.resolveXmppServiceDomain(RemoteXmppTcpConnectionEndpoints.java:144)
	  at org.jivesoftware.smack.tcp.rce.RemoteXmppTcpConnectionEndpoints.lookup(RemoteXmppTcpConnectionEndpoints.java:95)
	  at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectUsingConfiguration(XMPPTCPConnection.java:591)
	  at org.jivesoftware.smack.tcp.XMPPTCPConnection.connectInternal(XMPPTCPConnection.java:849)
	  at org.jivesoftware.smack.AbstractXMPPConnection.connect(AbstractXMPPConnection.java:526)
	  - locked <0x641b> (a org.jivesoftware.smack.tcp.XMPPTCPConnection)
	  at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.connectAndLogin(ProtocolProviderServiceJabberImpl.java:1110)
	  at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.initializeConnectAndLogin(ProtocolProviderServiceJabberImpl.java:773)
	  - locked <0x641c> (a java.lang.Object)
	  at net.java.sip.communicator.impl.protocol.jabber.ProtocolProviderServiceJabberImpl.register(ProtocolProviderServiceJabberImpl.java:627)
	  at net.java.sip.communicator.util.account.LoginManager$RegisterProvider.run(LoginManager.java:308)

that looks like a DNS lookup could be the cause for the delay. Notably, MiniDNS seems to be performing a DNS lookup with the TCP fallback (org.minidns.source.NetworkDataSource.queryTcp()) and waits for the TCP connection to be established. This could very well be the cause of the delay. If you enable DEBUG log for MiniDNS (de.measite.minidns), then this could get us some more insight.

If it is really the DNS lookup, then caching DNS query results could help (assuming the DNS RR has a reasonable cache value). DNS result caching to persistent storage could also help dramatically in case where the DNS lookup is unreliable and/or causes a long delay.