handles[i] = sockets[i].handle;
}
- handles_changed := cast(^Socket.Handle) alloc.from_stack(sockets.count * sizeof Socket.Handle);
+ handles_changed := cast(^i32) alloc.from_stack(sockets.count * sizeof i32);
num_changed := __net_poll_recv(handles, timeout, handles_changed);
if changed_buffer.count == 0 do return .[];
assert(changed_buffer.count >= num_changed, "Not enough space to write back changed sockets.");
- 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.");
+ changed_buffer.count = num_changed;
+ memory.copy(changed_buffer.data, handles_changed, num_changed * sizeof i32);
- return result;
+ return changed_buffer;
}
socket_send :: (s: ^Socket, data: [] u8) -> i32 {
#package __net_connect :: (handle: Socket.Handle, host: str, port: u16) -> SocketError ---
#package __net_send :: (handle: Socket.Handle, data: [] u8) -> i32 ---
#package __net_recv :: (handle: Socket.Handle, data: [] u8) -> i32 ---
- #package __net_poll_recv :: (handle: [] Socket.Handle, timeout: i32, out_recv: ^Socket.Handle) -> i32 ---
+ #package __net_poll_recv :: (handle: [] Socket.Handle, timeout: i32, out_recv_indicies: ^i32) -> i32 ---
#package __net_address_get_address :: (address: Socket_Address.Handle, out_buffer: [] u8) -> i32 ---
#package __net_address_get_port :: (address: Socket_Address.Handle) -> i32 ---