Home > Back-end >  Beast SSL Connection Graceful Shutdown
Beast SSL Connection Graceful Shutdown

Time:06-29

I am implementing an HTTPS client that tries to read information from the server. During its work the shutdown can be requested. It can be expresses in the following code:

        http::async_read( stream_, buffer_, res_,
                          beast::bind_front_handler(
                                  &session::on_read,
                                  shared_from_this()));
        beast::get_lowest_layer( stream_ ).cancel();

As soon as the read is cancelled (on_read is called with operation cancel error) I call

stream_.async_shutdown([t = shared_from_this()] ( beast::error_code ec ) {
            t->on_shutdown(ec);
        });

The shutdown finishes with the following error:

application data after close notify

The question is whether it is safe to ignore this error?

CodePudding user response:

You can ignore this error. It happens if a server sends data concurrently - started sending an application data chunk asynchronousely right before has received close notify.

stream_.async_shutdown([t = shared_from_this()] ( beast::error_code ec ) {
    if (ec ...)  // add proper condition here
        ec = beast::error_code(success);
    t->on_shutdown(ec);
});

I would also add some flag to session and set it before cancel, so session::on_read is not unexpected, can be ignored after shutdown.

  • Related