// 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();
}
}