aboutsummaryrefslogtreecommitdiff
path: root/src/org/xbill/DNS/Client.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/xbill/DNS/Client.java')
-rw-r--r--src/org/xbill/DNS/Client.java58
1 files changed, 58 insertions, 0 deletions
diff --git a/src/org/xbill/DNS/Client.java b/src/org/xbill/DNS/Client.java
new file mode 100644
index 0000000..2eef44f
--- /dev/null
+++ b/src/org/xbill/DNS/Client.java
@@ -0,0 +1,58 @@
+// Copyright (c) 2005 Brian Wellington (bwelling@xbill.org)
+
+package org.xbill.DNS;
+
+import java.io.*;
+import java.net.*;
+import java.nio.channels.*;
+import org.xbill.DNS.utils.hexdump;
+
+class Client {
+
+protected long endTime;
+protected SelectionKey key;
+
+protected
+Client(SelectableChannel channel, long endTime) throws IOException {
+ boolean done = false;
+ Selector selector = null;
+ this.endTime = endTime;
+ try {
+ selector = Selector.open();
+ channel.configureBlocking(false);
+ key = channel.register(selector, SelectionKey.OP_READ);
+ done = true;
+ }
+ finally {
+ if (!done && selector != null)
+ selector.close();
+ if (!done)
+ channel.close();
+ }
+}
+
+static protected void
+blockUntil(SelectionKey key, long endTime) throws IOException {
+ long timeout = endTime - System.currentTimeMillis();
+ int nkeys = 0;
+ if (timeout > 0)
+ nkeys = key.selector().select(timeout);
+ else if (timeout == 0)
+ nkeys = key.selector().selectNow();
+ if (nkeys == 0)
+ throw new SocketTimeoutException();
+}
+
+static protected void
+verboseLog(String prefix, byte [] data) {
+ if (Options.check("verbosemsg"))
+ System.err.println(hexdump.dump(prefix, data));
+}
+
+void
+cleanup() throws IOException {
+ key.selector().close();
+ key.channel().close();
+}
+
+}