Browse Source

At Jinmei's suggestion, also handle errors in recv() and send().


git-svn-id: svn://bind10.isc.org/svn/bind10/trunk@1544 e5f2f494-b856-4b98-b285-d166d9295462
Shane Kerr 15 years ago
parent
commit
9d171c0b03
1 changed files with 13 additions and 0 deletions
  1. 13 0
      src/bin/auth/main.cc

+ 13 - 0
src/bin/auth/main.cc

@@ -473,6 +473,8 @@ processMessageUDP(const int fd, Message& dns_message,
     }
     }
 }
 }
 
 
+// XXX: this function does not handle partial reads or partial writes,
+//      and is VERY UNSAFE - will probably be removed or rewritten
 void
 void
 processMessageTCP(const int fd, Message& dns_message,
 processMessageTCP(const int fd, Message& dns_message,
                   MessageRenderer& response_renderer)
                   MessageRenderer& response_renderer)
@@ -495,6 +497,13 @@ processMessageTCP(const int fd, Message& dns_message,
         cerr << "[XX] process TCP" << endl;
         cerr << "[XX] process TCP" << endl;
     }
     }
     cc = recv(ts, sizebuf, 2, 0);
     cc = recv(ts, sizebuf, 2, 0);
+    if (cc < 0) {
+        if (verbose_mode) {
+            cerr << "[XX] TCP recv failure:" << endl;
+        }
+        close(ts);
+        return;
+    }
     if (verbose_mode) {
     if (verbose_mode) {
         cerr << "[XX] got: " << cc << endl;
         cerr << "[XX] got: " << cc << endl;
     }
     }
@@ -549,6 +558,10 @@ processMessageTCP(const int fd, Message& dns_message,
                          << endl;
                          << endl;
                 }
                 }
             }
             }
+        } else {
+            if (verbose_mode) {
+                cerr << "TCP send error" << endl;
+            }
         }
         }
     }
     }