summaryrefslogtreecommitdiff
path: root/test/interactive-helper
diff options
context:
space:
mode:
authorDavid Kalnischkies <kalnischkies@gmail.com>2012-07-11 18:43:53 +0200
committerDavid Kalnischkies <kalnischkies@gmail.com>2012-07-11 18:43:53 +0200
commit57d13de2fb64a97d1a43d493c253ad2132ffd566 (patch)
treea623c5683873bd9b2a4c9d6c16a20e5e4b772898 /test/interactive-helper
parent7a1bed9d453379fcd22489bdb9f81f377abcaae2 (diff)
make the server a little more robust against write errors (e.g. broken pipe)
Diffstat (limited to 'test/interactive-helper')
-rw-r--r--test/interactive-helper/aptwebserver.cc15
1 files changed, 11 insertions, 4 deletions
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 <time.h>
#include <stdlib.h>
#include <dirent.h>
+#include <signal.h>
char const * const httpcodeToStr(int const httpcode) { /*{{{*/
switch (httpcode) {
@@ -105,10 +106,12 @@ bool sendHead(int const client, int const httpcode, std::list<std::string> &head
for (std::list<std::string>::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");