node: Add boolean argument to readSocket to switch between blocking and non-blocking mode
This commit is contained in:
@@ -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;
|
||||
|
||||
+22
-2
@@ -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);
|
||||
|
||||
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;
|
||||
|
||||
Reference in New Issue
Block a user