node: make accept blocking
This commit is contained in:
+8
-2
@@ -450,13 +450,19 @@ pub const AcceptError = error {
|
|||||||
} || HandleError || Network.AcceptError || CancelError;
|
} || HandleError || Network.AcceptError || CancelError;
|
||||||
|
|
||||||
pub fn accept(self: *Node, handle: Handle) AcceptError!Handle {
|
pub fn accept(self: *Node, handle: Handle) AcceptError!Handle {
|
||||||
try self.scheduler.sleep(10);
|
|
||||||
const old_desc = try self.handleToDescOfType(handle, .listen);
|
const old_desc = try self.handleToDescOfType(handle, .listen);
|
||||||
const new_desc = self.unusedDesc() orelse return AcceptError.DescriptorLimit;
|
const new_desc = self.unusedDesc() orelse return AcceptError.DescriptorLimit;
|
||||||
try self.network_host.accept(&old_desc.listen, &new_desc.conn);
|
|
||||||
|
while (true) {
|
||||||
|
try self.scheduler.sleep(10);
|
||||||
|
self.network_host.accept(&old_desc.listen, &new_desc.conn) catch |err| switch (err) {
|
||||||
|
error.AcceptQueueEmpty => continue,
|
||||||
|
else => return err,
|
||||||
|
};
|
||||||
new_desc.kind = .conn;
|
new_desc.kind = .conn;
|
||||||
return self.descToHandle(new_desc);
|
return self.descToHandle(new_desc);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
pub const ConnectError = error {
|
pub const ConnectError = error {
|
||||||
DescriptorLimit,
|
DescriptorLimit,
|
||||||
|
|||||||
Reference in New Issue
Block a user