Now closes file if connection is interrupted in default_resource example. Also some minor cleanup.
This commit is contained in:
parent
1a39476f92
commit
fa1efed7f0
4 changed files with 31 additions and 21 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
cmake_minimum_required (VERSION 2.8)
|
cmake_minimum_required (VERSION 2.8)
|
||||||
project (Simple-Web-Server)
|
project (Simple-Web-Server)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -O3 -Wall")
|
||||||
|
|
||||||
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
|
||||||
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
|
if (CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9)
|
||||||
|
|
|
||||||
|
|
@ -109,9 +109,14 @@ int main() {
|
||||||
if(length>buffer_size) {
|
if(length>buffer_size) {
|
||||||
vector<char> buffer(buffer_size);
|
vector<char> buffer(buffer_size);
|
||||||
size_t read_length;
|
size_t read_length;
|
||||||
while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) {
|
try {
|
||||||
response.stream.write(&buffer[0], read_length);
|
while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) {
|
||||||
response << HttpServer::flush;
|
response.stream.write(&buffer[0], read_length);
|
||||||
|
response << HttpServer::flush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(const exception &e) {
|
||||||
|
cerr << "Connection interrupted, closing file" << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -109,9 +109,14 @@ int main() {
|
||||||
if(length>buffer_size) {
|
if(length>buffer_size) {
|
||||||
vector<char> buffer(buffer_size);
|
vector<char> buffer(buffer_size);
|
||||||
size_t read_length;
|
size_t read_length;
|
||||||
while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) {
|
try {
|
||||||
response.stream.write(&buffer[0], read_length);
|
while((read_length=ifs.read(&buffer[0], buffer_size).gcount())>0) {
|
||||||
response << HttpsServer::flush;
|
response.stream.write(&buffer[0], read_length);
|
||||||
|
response << HttpsServer::flush;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch(const exception &e) {
|
||||||
|
cerr << "Connection interrupted, closing file" << endl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -88,9 +88,7 @@ namespace SimpleWeb {
|
||||||
remote_endpoint_address=socket.lowest_layer().remote_endpoint().address().to_string();
|
remote_endpoint_address=socket.lowest_layer().remote_endpoint().address().to_string();
|
||||||
remote_endpoint_port=socket.lowest_layer().remote_endpoint().port();
|
remote_endpoint_port=socket.lowest_layer().remote_endpoint().port();
|
||||||
}
|
}
|
||||||
catch(const std::exception& e) {
|
catch(const std::exception& e) {}
|
||||||
std::cerr << e.what() << std::endl;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -222,20 +220,22 @@ namespace SimpleWeb {
|
||||||
std::shared_ptr<boost::asio::deadline_timer> timer;
|
std::shared_ptr<boost::asio::deadline_timer> timer;
|
||||||
if(timeout_content>0)
|
if(timeout_content>0)
|
||||||
timer=set_timeout_on_socket(socket, timeout_content);
|
timer=set_timeout_on_socket(socket, timeout_content);
|
||||||
|
unsigned long long content_length;
|
||||||
try {
|
try {
|
||||||
boost::asio::async_read(*socket, request->streambuf,
|
content_length=stoull(it->second);
|
||||||
boost::asio::transfer_exactly(stoull(it->second)-num_additional_bytes),
|
|
||||||
[this, socket, request, timer]
|
|
||||||
(const boost::system::error_code& ec, size_t /*bytes_transferred*/) {
|
|
||||||
if(timeout_content>0)
|
|
||||||
timer->cancel();
|
|
||||||
if(!ec)
|
|
||||||
find_resource(socket, request);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
catch(const std::exception& e) {
|
catch(const std::exception &e) {
|
||||||
std::cerr << e.what() << std::endl;
|
return;
|
||||||
}
|
}
|
||||||
|
boost::asio::async_read(*socket, request->streambuf,
|
||||||
|
boost::asio::transfer_exactly(content_length-num_additional_bytes),
|
||||||
|
[this, socket, request, timer]
|
||||||
|
(const boost::system::error_code& ec, size_t /*bytes_transferred*/) {
|
||||||
|
if(timeout_content>0)
|
||||||
|
timer->cancel();
|
||||||
|
if(!ec)
|
||||||
|
find_resource(socket, request);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
find_resource(socket, request);
|
find_resource(socket, request);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue