node: Add boolean argument to readSocket to switch between blocking and non-blocking mode

This commit is contained in:
2026-06-02 13:49:22 +02:00
parent 1250375063
commit 38ae508c49
2 changed files with 24 additions and 4 deletions
+1 -1
View File
@@ -1215,7 +1215,7 @@ fn netRead(userdata: ?*anyopaque, fd: net.Socket.Handle, data: [][]u8) net.Strea
if (buffer.len == 0) if (buffer.len == 0)
continue; continue;
const n = node.readSocket(fd, buffer) catch |err| switch (err) { const n = node.readSocket(fd, buffer, true) catch |err| switch (err) {
error.InvalidHandle => return error.SocketUnconnected, error.InvalidHandle => return error.SocketUnconnected,
}; };
copied += n; copied += n;
+22 -2
View File
@@ -417,11 +417,31 @@ pub fn connect(self: *Node, address: Address) ConnectError!Handle {
return self.descToHandle(desc); return self.descToHandle(desc);
} }
pub fn readSocket(self: *Node, handle: Handle, target: []u8) HandleError!usize { pub fn readSocket(self: *Node, handle: Handle, target: []u8, block: bool) HandleError!usize {
self.scheduler.sleep(10); if (target.len == 0)
return 0;
const desc = try self.handleToDescOfType(handle, .conn); const desc = try self.handleToDescOfType(handle, .conn);
if (block) {
while (true) {
self.scheduler.sleep(10);
const num = self.network_host.read(&desc.conn, target);
if (num > 0)
return num;
if (num == 0) {
if (!self.network_host.isConnected(&desc.conn))
return 0;
}
}
unreachable;
} else {
return self.network_host.read(&desc.conn, target); return self.network_host.read(&desc.conn, target);
} }
}
pub const WriteSocketError = HandleError || Network.SendError; pub const WriteSocketError = HandleError || Network.SendError;