From: David Kalnischkies Date: Wed, 11 Jul 2012 16:43:53 +0000 (+0200) Subject: make the server a little more robust against write errors (e.g. broken pipe) X-Git-Tag: 0.9.13.exp1ubuntu1~50^2~2 X-Git-Url: https://git.saurik.com/apt.git/commitdiff_plain/57d13de2fb64a97d1a43d493c253ad2132ffd566?ds=sidebyside make the server a little more robust against write errors (e.g. broken pipe) --- diff --git a/test/interactive-helper/aptwebserver.cc b/test/interactive-helper/aptwebserver.cc index 4746aed96..dbc4a19e0 100644 --- a/test/interactive-helper/aptwebserver.cc +++ b/test/interactive-helper/aptwebserver.cc @@ -21,6 +21,7 @@ #include #include #include +#include char const * const httpcodeToStr(int const httpcode) { /*{{{*/ switch (httpcode) { @@ -105,10 +106,12 @@ bool sendHead(int const client, int const httpcode, std::list &head for (std::list::const_iterator h = headers.begin(); Success == true && h != headers.end(); ++h) { Success &= FileFd::Write(client, h->c_str(), h->size()); - Success &= FileFd::Write(client, "\r\n", 2); + if (Success == true) + Success &= FileFd::Write(client, "\r\n", 2); std::clog << *h << std::endl; } - Success &= FileFd::Write(client, "\r\n", 2); + if (Success == true) + Success &= FileFd::Write(client, "\r\n", 2); std::clog << "<<<<<<<<<<<<<<<<" << std::endl; return Success; } @@ -122,14 +125,16 @@ bool sendFile(int const client, FileFd &data) { /*{{{*/ break; Success &= FileFd::Write(client, buffer, actual); } - Success &= FileFd::Write(client, "\r\n", 2); + if (Success == true) + Success &= FileFd::Write(client, "\r\n", 2); return Success; } /*}}}*/ bool sendData(int const client, std::string const &data) { /*{{{*/ bool Success = true; Success &= FileFd::Write(client, data.c_str(), data.size()); - Success &= FileFd::Write(client, "\r\n", 2); + if (Success == true) + Success &= FileFd::Write(client, "\r\n", 2); return Success; } /*}}}*/ @@ -318,6 +323,8 @@ int main(int const argc, const char * argv[]) } // create socket, bind and listen to it {{{ + // ignore SIGPIPE, this can happen on write() if the socket closes connection + signal(SIGPIPE, SIG_IGN); int sock = socket(AF_INET6, SOCK_STREAM, 0); if(sock < 0 ) { _error->Errno("aptwerbserver", "Couldn't create socket");