这个问题有点棘手,我真的不认为我会找到答案,但无论如何我会尝试。
我正在编写一个使用 gloox 进行 XMPP 传输的 C++ 程序。我的问题只发生在我的计算机上(Linux Mint 13 MATE 32 位)是永远不会调用“onConnect()”处理程序。当我们使用 jabber.org 服务器时这不是问题(实际上,我什至不知道它没有被调用...)但是当我们安装 LAN ejabberd 服务器时问题开始出现。
使用 jabber.org 服务器,即使未调用“onConnect”,应用程序也能够正常发送/接收消息。但不是在 ejabberd 上。起初我认为这是证书或其他问题,但后来我们尝试了其他 Linux 机器(Ubuntu 12.04 x64、Arch x64 和 Debian 6.0 32(服务器在这台机器上运行))并且它在任何那些电脑。此外,使用 Python-Twisted 的姊妹应用程序可以在有问题的计算机上正常连接。
每次都会调用验证函数 onTLSConnect() 并返回 true。在有问题的计算机上,当使用我们的 ejabberd 服务器时,此后连接未建立,套接字在大约 25 秒后自行关闭(并调用 onDisconnect()...)
那么,我的问题是:是否存在阻止 Gloox 终止连接的互联网设置(如防火墙?)。或者有没有人遇到过类似的问题? 谢谢!
编辑:我在我的笔记本电脑上制作了一个 Mint 13 MATE 32 位虚拟机,但出现了同样的问题。我现在可以断定这是薄荷某处的错误。
EDIT2:在 Mint 64 位上工作正常....我在 Mint 的错误页面上开了一张票
最佳答案
我上周遇到了这个问题,好像是gloox的bug。 它发生在 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
关于linux - Gloox: "onConnect"不叫 Linux Mint 13,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13073044/