From 78fffb86a6d17c31225df0053503c499c130481d Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Tue, 18 Jan 2022 18:39:18 -0600 Subject: [PATCH] improved socket_poll_all implementation --- core/net/net.onyx | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/core/net/net.onyx b/core/net/net.onyx index c46740f9..f4b8a582 100644 --- a/core/net/net.onyx +++ b/core/net/net.onyx @@ -108,7 +108,7 @@ socket_accept :: (s: ^Socket) -> (Socket, Socket_Address) { return new_socket, new_addr; } -socket_poll_all :: (changed: ^[] ^Socket, timeout: i32, sockets: [] ^Socket) { +socket_poll_all :: (sockets: [] ^Socket, timeout := -1, changed_buffer: [] i32 = .[]) -> [] i32 { handles := (cast(^Socket.Handle) alloc.from_stack(sockets.count * sizeof Socket.Handle))[0 .. sockets.count]; for i: sockets.count { handles[i] = sockets[i].handle; @@ -117,18 +117,24 @@ socket_poll_all :: (changed: ^[] ^Socket, timeout: i32, sockets: [] ^Socket) { handles_changed := cast(^Socket.Handle) alloc.from_stack(sockets.count * sizeof Socket.Handle); num_changed := __net_poll_recv(handles, timeout, handles_changed); - if changed == null do return; + if changed_buffer.count == 0 do return .[]; + assert(changed_buffer.count >= num_changed, "Not enough space to write back changed sockets."); - changed.count = 0; - for i: num_changed { - for sockets { - if handles_changed[i] == it.handle { - changed.data[changed.count] = it; - changed.count += 1; + result := changed_buffer; + result.count = 0; + for handles_changed[0..num_changed] { + for si: sockets.count { + if it == sockets[si].handle { + result.data[result.count] = si; + result.count += 1; continue continue; } } } + + assert(result.count == num_changed, "bad."); + + return result; } socket_send :: (s: ^Socket, data: [] u8) -> i32 { -- 2.25.1