[svn] commit: r1380 - /trunk/src/bin/auth/main.cc

BIND 10 source code commits bind10-changes at lists.isc.org
Fri Mar 12 23:32:01 UTC 2010


Author: jinmei
Date: Fri Mar 12 23:32:01 2010
New Revision: 1380

Log:
handle more error cases with native socket APIs

Modified:
    trunk/src/bin/auth/main.cc

Modified: trunk/src/bin/auth/main.cc
==============================================================================
--- trunk/src/bin/auth/main.cc (original)
+++ trunk/src/bin/auth/main.cc Fri Mar 12 23:32:01 2010
@@ -419,6 +419,7 @@
         if (setsockopt(s, IPPROTO_IPV6, IPV6_V6ONLY, &on, sizeof(on)) < 0) {
             cerr << "couldn't set IPV6_V6ONLY socket option" << endl;
         }
+        // proceed anyway
     }
 
     if (setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) < 0) {
@@ -429,7 +430,9 @@
         isc_throw(FatalError, "binding socket failure");
     }
 
-    listen(s, 100);
+    if (listen(s, 100) < 0) {
+        isc_throw(FatalError, "failed to listen on a TCP socket");
+    }
     return (s);
 }
 
@@ -449,9 +452,14 @@
         InputBuffer buffer(recvbuf, cc);
         if (auth_server->processMessage(buffer, dns_message, response_renderer,
                                         true)) {
-            sendto(fd, response_renderer.getData(),
-                   response_renderer.getLength(), 0, sa, sa_len);
-        }
+            cc = sendto(fd, response_renderer.getData(),
+                        response_renderer.getLength(), 0, sa, sa_len);
+            if (cc != response_renderer.getLength()) {
+                cerr << "UDP send error" << endl;
+            }
+        }
+    } else if (verbose_mode) {
+        cerr << "UDP receive error" << endl;
     }
 }
 
@@ -464,7 +472,14 @@
     struct sockaddr* sa = static_cast<struct sockaddr*>((void*)&ss);
     char sizebuf[2];
     int cc;
+
     int ts = accept(fd, sa, &sa_len);
+    if (ts < 0) {
+        if (verbose_mode) {
+            cerr << "[XX] TCP accept failure:" << endl;
+            return;
+        }
+    }
 
     if (verbose_mode) {
         cerr << "[XX] process TCP" << endl;
@@ -487,7 +502,13 @@
         if (verbose_mode) {
             cerr << "[XX] cc now: " << cc << " of " << size << endl;
         }
-        cc += recv(ts, &message_buffer[0] + cc, size - cc, 0);
+        const int cc0 = recv(ts, &message_buffer[0] + cc, size - cc, 0);
+        if (cc0 < 0) {
+            if (verbose_mode) {
+                cerr << "TCP receive error" << endl;
+            }
+        }
+        cc += cc0;
     }
 
     InputBuffer buffer(&message_buffer[0], size);




More information about the bind10-changes mailing list