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)
|
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;
|
||||||
|
|||||||
+23
-3
@@ -417,10 +417,30 @@ 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);
|
||||||
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;
|
pub const WriteSocketError = HandleError || Network.SendError;
|
||||||
|
|||||||
Reference in New Issue
Block a user