From d5d8e2fcd2ff27d2485cd6d09ec0e4af5e5941ab Mon Sep 17 00:00:00 2001 From: Evgeniy Date: Sun, 25 Sep 2016 09:14:27 -0400 Subject: [PATCH] Fix error handling in server examples --- examples/http_async_server.hpp | 25 ++++++++++++++----------- examples/http_sync_server.hpp | 28 ++++++++++++++++------------ 2 files changed, 30 insertions(+), 23 deletions(-) diff --git a/examples/http_async_server.hpp b/examples/http_async_server.hpp index 44b80812..bc686a82 100644 --- a/examples/http_async_server.hpp +++ b/examples/http_async_server.hpp @@ -249,20 +249,23 @@ private: asio::placeholders::error)); return; } - resp_type res; - res.status = 200; - res.reason = "OK"; - res.version = req_.version; - res.headers.insert("Server", "http_async_server"); - res.headers.insert("Content-Type", mime_type(path)); - res.body = path; try { + resp_type res; + res.status = 200; + res.reason = "OK"; + res.version = req_.version; + res.headers.insert("Server", "http_async_server"); + res.headers.insert("Content-Type", mime_type(path)); + res.body = path; prepare(res); + async_write(sock_, std::move(res), + std::bind(&peer::on_write, shared_from_this(), + asio::placeholders::error)); } catch(std::exception const& e) { - res = {}; + response_v1 res; res.status = 500; res.reason = "Internal Error"; res.version = req_.version; @@ -271,10 +274,10 @@ private: res.body = std::string{"An internal error occurred"} + e.what(); prepare(res); + async_write(sock_, std::move(res), + std::bind(&peer::on_write, shared_from_this(), + asio::placeholders::error)); } - async_write(sock_, std::move(res), - std::bind(&peer::on_write, shared_from_this(), - asio::placeholders::error)); } void on_write(error_code ec) diff --git a/examples/http_sync_server.hpp b/examples/http_sync_server.hpp index 83706847..b9572bb7 100644 --- a/examples/http_sync_server.hpp +++ b/examples/http_sync_server.hpp @@ -172,33 +172,37 @@ private: write(sock, res, ec); if(ec) break; + return; } - resp_type res; - res.status = 200; - res.reason = "OK"; - res.version = req.version; - res.headers.insert("Server", "http_sync_server"); - res.headers.insert("Content-Type", mime_type(path)); - res.body = path; try { + resp_type res; + res.status = 200; + res.reason = "OK"; + res.version = req.version; + res.headers.insert("Server", "http_sync_server"); + res.headers.insert("Content-Type", mime_type(path)); + res.body = path; prepare(res); + write(sock, res, ec); + if(ec) + break; } catch(std::exception const& e) { - res = {}; + response_v1 res; res.status = 500; res.reason = "Internal Error"; res.version = req.version; res.headers.insert("Server", "http_sync_server"); res.headers.insert("Content-Type", "text/html"); res.body = - std::string{"An internal error occurred"} + e.what(); + std::string{"An internal error occurred: "} + e.what(); prepare(res); + write(sock, res, ec); + if(ec) + break; } - write(sock, res, ec); - if(ec) - break; } fail(id, ec); }