这个问题有点棘手,我想我找不到答案,但无论如何我会努力的。
我正在编写一个C++程序,使用GOLox进行XMPP传输。我的问题是,“onConnect()”处理程序从未被调用,这只发生在我的计算机上(LinuxMint13mate32bits)。当我们使用jabber.org服务器时这不是一个问题(实际上,我甚至不知道它没有被调用…),但是当我们安装LAN-ejabber服务器时,问题开始出现。
使用jabber.org服务器,即使没有调用“onConnect”,应用程序也能够很好地发送/接收消息。但不是在埃贾伯德身上。起初我认为这是证书或其他东西的问题,但后来我们在其他Linux机器(Ubuntu12.04x64、Archx64和Debian6.032(服务器在这台机器上运行))上进行了尝试,在任何一台计算机上都可以正常工作。另外,使用Python Twisted的姊妹应用程序可以在有问题的计算机上很好地连接。
验证函数onTLSConnect()每次都被调用并返回true。在有问题的计算机上,当使用ejabberd服务器时,连接在那之后没有建立,套接字在大约25秒后自行关闭(调用onDisconnect())
所以,我的问题是:有没有互联网设置(比如防火墙?)这阻止了Gloox终止连接。或者有人经历过类似的问题吗?
谢谢!
编辑:我在我的笔记本电脑上做了一个Mint 13 MATE 32位的虚拟机,同样的问题也出现了。我现在可以断定是薄荷糖里的虫子。
编辑2:在64位的薄荷糖上效果不错……我在薄荷糖的错误页面上开了一张罚单
最佳答案
我上星期碰到这个问题,好像是格洛克斯的毛病。
它发生在32位linux上。
看这个https://bugs.launchpad.net/linuxmint/+bug/1071416
事实上,您在服务器上“在线”,但您的“状态”未知。您可以简单地向服务器发送“聊天”状态以继续您的工作。
这样地
#ifdef GLOOX_ON_CONNECT_BUG_PATCH
Poco::Thread::sleep(3000);//休息3秒,然后连接成功,哎,该死的bug
this->is_connected = true;
client->setPresence(Presence::Chat, 0);
#endif