Check timeout since it seems that readWithTimeout not always works
authorAki Tuomi <cmouse@desteem.org>
Tue, 13 Jan 2015 10:30:11 +0000 (12:30 +0200)
committerAki Tuomi <cmouse@desteem.org>
Tue, 13 Jan 2015 10:30:11 +0000 (12:30 +0200)
modules/remotebackend/httpconnector.cc

index 21e5e3741ff2abcdcf1cb8f9fae8d4eeefd18cfc..9befb8bef90626f2430cd1a8a1e600e8afa8bfe6 100644 (file)
@@ -382,11 +382,13 @@ int HTTPConnector::recv_message(rapidjson::Document &output) {
     char buffer[4096];
     int rd = -1;
     bool fail = false;
+    time_t t0;
 
     arl.initialize(&resp);
 
     try {
-      while(arl.ready() == false) {
+      t0 = time((time_t*)NULL);
+      while(arl.ready() == false && (labs(time((time_t*)NULL) - t0) <= timeout/1000)) {
         rd = d_socket->readWithTimeout(buffer, sizeof(buffer), timeout);
         if (rd<0) {
           delete d_socket;
@@ -397,6 +399,13 @@ int HTTPConnector::recv_message(rapidjson::Document &output) {
         buffer[rd] = 0;
         arl.feed(std::string(buffer, rd));
       }
+      // timeout occured.
+      if (arl.ready() == false) {
+        L<<Logger::Error<<"While reading from HTTP endpoint "<<d_addr.toStringWithPort()<<": timeout"<<std::endl;
+        delete d_socket;
+        d_socket = NULL;
+        fail = true;
+      }     
     } catch (NetworkError &ne) {
       L<<Logger::Error<<"While reading from HTTP endpoint "<<d_addr.toStringWithPort()<<": "<<ne.what()<<std::endl; 
       delete d_socket;