tangled
alpha
login
or
join now
rockorager.dev
/
ourio
6
fork
atom
An asynchronous IO runtime
6
fork
atom
overview
issues
pulls
pipelines
dns: only send one question at a time
rockorager.dev
10 months ago
510c7448
8896ef65
verified
This commit was signed with the committer's
known signature
.
rockorager.dev
SSH Key Fingerprint:
SHA256:qn/Fjy7CpbcogGEPB14Y53hLnQleZNFY9lkQnuudFLs=
+13
-18
1 changed file
expand all
collapse all
unified
split
src
stda
net
dns.zig
+13
-18
src/stda/net/dns.zig
···
43
43
self.gpa.free(self.config.nameservers);
44
44
}
45
45
46
46
-
pub fn resolveQueries(self: *Resolver, io: *Ring, queries: []const Question, ctx: ourio.Context) !void {
46
46
+
pub fn resolveQuery(self: *Resolver, io: *Ring, query: Question, ctx: ourio.Context) !void {
47
47
assert(self.config.nameservers.len > 0);
48
48
49
49
const conn = try self.gpa.create(Connection);
50
50
conn.* = .{ .gpa = self.gpa, .ctx = ctx, .config = self.config };
51
51
-
try conn.writeQuestions(queries);
51
51
+
try conn.writeQuestion(query);
52
52
53
53
try conn.tryNext(io);
54
54
}
···
470
470
try self.ctx.cb(io, task);
471
471
}
472
472
473
473
-
fn writeQuestions(self: *Connection, queries: []const Question) !void {
474
474
-
const header: Header = .{ .question_count = @intCast(queries.len) };
473
473
+
fn writeQuestion(self: *Connection, query: Question) !void {
474
474
+
const header: Header = .{ .question_count = 1 };
475
475
var writer = self.write_buffer.writer(self.gpa);
476
476
try writer.writeAll(&header.asBytes());
477
477
478
478
-
for (queries) |query| {
479
479
-
var iter = std.mem.splitScalar(u8, query.host, '.');
480
480
-
while (iter.next()) |val| {
481
481
-
const len: u8 = @intCast(val.len);
482
482
-
try writer.writeByte(len);
483
483
-
try writer.writeAll(val);
484
484
-
}
485
485
-
try writer.writeByte(0x00);
486
486
-
try writer.writeInt(u16, @intFromEnum(query.type), .big);
487
487
-
try writer.writeInt(u16, @intFromEnum(query.class), .big);
478
478
+
var iter = std.mem.splitScalar(u8, query.host, '.');
479
479
+
while (iter.next()) |val| {
480
480
+
const len: u8 = @intCast(val.len);
481
481
+
try writer.writeByte(len);
482
482
+
try writer.writeAll(val);
488
483
}
484
484
+
try writer.writeByte(0x00);
485
485
+
try writer.writeInt(u16, @intFromEnum(query.type), .big);
486
486
+
try writer.writeInt(u16, @intFromEnum(query.class), .big);
489
487
}
490
488
};
491
489
···
549
547
550
548
try io.run(.until_done);
551
549
552
552
-
try resolver.resolveQueries(&io, &.{
553
553
-
.{ .host = "timculverhouse.com" },
554
554
-
.{ .host = "timculverhouse.com", .type = .AAAA },
555
555
-
}, .{});
550
550
+
try resolver.resolveQuery(&io, .{ .host = "timculverhouse.com" }, .{});
556
551
try io.run(.until_done);
557
552
try std.testing.expectEqual(2, resolver.config.nameservers.len);
558
553
try std.testing.expectEqual(3, resolver.config.attempts);