Обратный вызов Asio Boost не вызывается

Я используя Boost.Asio для сетевых операций, они должны (и на самом деле могут, там нет сложных структур данных или чего-то еще) оставаться на довольно низком уровне, поскольку я не могу позволить себе роскошь накладных расходов на сериализацию (и библиотеки, которые я нашел, которые действительно предлагали достаточная производительность, казалось, плохо подходит для моего случая).

Проблема заключается в асинхронной записи, которую я выполняю от клиента (в QT, но здесь это, вероятно, не имеет значения). Обратный вызов, указанный в async_write , никогда не вызывается, и я не понимаю, почему. Код:

void SpikingMatrixClient::addMatrix() {
    std::cout << "entered add matrix" << std::endl;
    int action = protocol::Actions::AddMatrix;
    int matrixSize = this->ui->editNetworkSize->text().toInt();
    std::ostream out(&buf);
    out.write(reinterpret_cast<const char*>(&action), sizeof(action));
    out.write(reinterpret_cast<const char*>(&matrixSize), sizeof(matrixSize));
    boost::asio::async_write(*connection.socket(), buf.data(),
                             boost::bind(&SpikingMatrixClient::onAddMatrix, this, boost::asio::placeholders::error, boost::asio::placeholders::bytes_transferred));
}

, который вызывает первую запись. Обратный вызов -

void SpikingMatrixClient::onAddMatrix(const boost::system::error_code& error, size_t bytes_transferred) {
    std::cout << "entered onAddMatrix" << std::endl;
    if (!error) {
        buf.consume(bytes_transferred);
        requestMatrixList();
    } else {
        QString message = QString::fromStdString(error.message());
        this->ui->statusBar->showMessage(message, 15000);
    }
}

Обратный вызов никогда не вызывается, даже если сервер получает все данные. Может ли кто-нибудь придумать причину, по которой он может это делать?

P.S. Для этого соединения была оболочка, и да, вероятно, она появится снова. Отказался от него день или два назад, потому что я не смог найти проблему с этим обратным вызовом.

5
задан TC1 24 July 2011 в 11:30
поделиться