diff --git a/src/amqp_client.cpp b/src/amqp_client.cpp index 8df9b11..610de62 100644 --- a/src/amqp_client.cpp +++ b/src/amqp_client.cpp @@ -415,6 +415,7 @@ void ClientPrivate::closeOk(const Frame::Method &frame) connected = false; if (heartbeatTimer) heartbeatTimer->stop(); + socket->disconnectFromHost(); Q_EMIT q->disconnected(); } diff --git a/tests/auto/qamqpqueue/tst_qamqpqueue.cpp b/tests/auto/qamqpqueue/tst_qamqpqueue.cpp index 4a113fe..db6f14e 100644 --- a/tests/auto/qamqpqueue/tst_qamqpqueue.cpp +++ b/tests/auto/qamqpqueue/tst_qamqpqueue.cpp @@ -29,6 +29,7 @@ private Q_SLOTS: void removeIfUnused(); void removeIfEmpty(); void bindUnbind(); + void delayedBind(); void purge(); void canOnlyStartConsumingOnce(); void cancel(); @@ -276,6 +277,20 @@ void tst_QAMQPQueue::bindUnbind() QVERIFY(waitForSignal(queue, SIGNAL(unbound()))); } +void tst_QAMQPQueue::delayedBind() +{ + client->disconnectFromHost(); + QVERIFY(waitForSignal(client.data(), SIGNAL(disconnected()))); + Queue *queue = client->createQueue("test-delayed-bind"); + queue->declare(); + queue->bind("amq.topic", "routingKey"); + + client->connectToHost(); + QVERIFY(waitForSignal(client.data(), SIGNAL(connected()))); + QVERIFY(waitForSignal(queue, SIGNAL(declared()))); + QVERIFY(waitForSignal(queue, SIGNAL(bound()))); +} + void tst_QAMQPQueue::purge() { Queue *queue = client->createQueue("test-purge");