X-Git-Url: http://git.tdb.fi/?p=libs%2Fnet.git;a=blobdiff_plain;f=source%2Fhttp%2Fserver.cpp;h=e0b34b382e8a9d86e0a9c0a862a2a9250fa2220a;hp=b18ed4c76b02dec85572e41cfecac26f2f186852;hb=0165ed331051ae7fc64dfe85dd7ab8f5b11ba919;hpb=8c4ac1a6f0e154ebcbc72e196d24df322da673bc diff --git a/source/http/server.cpp b/source/http/server.cpp index b18ed4c..e0b34b3 100644 --- a/source/http/server.cpp +++ b/source/http/server.cpp @@ -121,8 +121,12 @@ void Server::client_data_available(Client &cl) cl.in_buf.erase(0, len); } + bool keepalive = false; if(cl.request && cl.request->is_complete() && !response) { + if(cl.request->has_header("Connection")) + keepalive = (cl.request->get_header("Connection")=="keep-alive"); + response = new Response(NONE); try { @@ -154,7 +158,18 @@ void Server::client_data_available(Client &cl) if(response) { cl.sock->write(response->str()); - cl.stale = true; + if(keepalive) + { + delete cl.request; + cl.request = 0; + delete cl.response; + cl.response = 0; + } + else + { + cl.sock->shutdown(IO::M_WRITE); + cl.stale = true; + } } }