[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