DNS: proper timeouts

This commit is contained in:
M66B 2024-01-06 14:02:38 +01:00
parent 67d98f7e10
commit 1222d87f8b
1 changed files with 8 additions and 4 deletions

View File

@ -63,6 +63,7 @@ import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.URL;
import java.net.UnknownHostException;
@ -434,7 +435,10 @@ public class DnsHelper {
@Override
public DnsQueryResult query(DnsMessage query, InetAddress address, int port) throws IOException {
// https://datatracker.ietf.org/doc/html/rfc7858
try (Socket socket = SSLSocketFactory.getDefault().createSocket(host, 853)) {
try (Socket socket = SSLSocketFactory.getDefault().createSocket()) {
socket.connect(new InetSocketAddress(host, 853), timeout);
socket.setSoTimeout(timeout);
byte[] out = query.toArray();
OutputStream os = socket.getOutputStream();
os.write(out.length / 256);
@ -492,8 +496,8 @@ public class DnsHelper {
request = (HttpsURLConnection) url.openConnection();
request.setRequestMethod("GET");
request.setRequestProperty("Content-Type", "application/dns-message");
request.setReadTimeout(timeout * 1000);
request.setConnectTimeout(timeout * 1000);
request.setReadTimeout(timeout);
request.setConnectTimeout(timeout);
request.setDoInput(true);
request.connect();
@ -572,7 +576,7 @@ public class DnsHelper {
});
try {
if (!sem.tryAcquire(timeout, TimeUnit.SECONDS))
if (!sem.tryAcquire(timeout, TimeUnit.MILLISECONDS))
ex = new IOException("timeout");
} catch (InterruptedException e) {
ex = new IOException("interrupted");