Пытаюсь написать простого отправителя сообщений для xmpp.
Решил воспользоваться gloox.
Так вот, оказалось, что без ручного засыпания сообщение теряется.
Вопрос, если кто знает, как в gloox дождаться отправки сообщения и только потом выйти?

Пример кода:

class MyMessenger: public ConnectionListener {
public:
MyMessenger(): client( 0 ) {}

~MyMessenger() {
if( client ) delete( client );
}

virtual void onConnect() override {
JID to(DST_JID);
MessageSession* session = new MessageSession( client, to );
session->send("test message"
// вот без этого сообщение теряется.
std::this_thread::sleep_for(std::chrono::milliseconds(500));
client->disposeMessageSession(session);
client->disconnect();
};

virtual void onDisconnect( ConnectionError ce ) override {
if( ce == ConnAuthenticationFailed )
cerr << "Auth failed. Reason: " << client->authError() << endl;
}

virtual bool onTLSConnect( const CertInfo& ) override {
return true;
}

void start() {

JID jid( USER_JID );

client = new Client( jid, USER_PASS );

client->setServer( SERVER );
client->setPort( PORT );
client->setTls( TLSRequired );

client->registerConnectionListener( this );

if( client->connect( false ) ) {
ConnectionError ce = ConnNoError;

while( ce == ConnNoError ) {
ce = client->recv();
}
cerr << "ce: " << ce << endl;
}

}

private:
Client* client;
};








 ,






URL записи