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)
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,
};
copied += n;
+23 -3
View File
@@ -417,10 +417,30 @@ pub fn connect(self: *Node, address: Address) ConnectError!Handle {
return self.descToHandle(desc);
}
pub fn readSocket(self: *Node, handle: Handle, target: []u8) HandleError!usize {
self.scheduler.sleep(10);
pub fn readSocket(self: *Node, handle: Handle, target: []u8, block: bool) HandleError!usize {
if (target.len == 0)
return 0;
const desc = try self.handleToDescOfType(handle, .conn);
return self.network_host.read(&desc.conn, target);
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);
}
}
pub const WriteSocketError = HandleError || Network.SendError;