From 3c27b1ddc4b25dc4ca603a08fc7ae1ffbedabd4e Mon Sep 17 00:00:00 2001 From: ChillerDragon Date: Sun, 28 Jul 2024 11:28:50 +0800 Subject: [PATCH] non blocking udp read (we still block on keypresses) --- src/teeworlds_asmr.asm | 4 ++++ src/udp.asm | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/teeworlds_asmr.asm b/src/teeworlds_asmr.asm index 0bb93b3..22880da 100644 --- a/src/teeworlds_asmr.asm +++ b/src/teeworlds_asmr.asm @@ -95,6 +95,7 @@ section .data KEY_RETURN equ 13 AF_INET equ 0x2 SOCK_DGRAM equ 0x2 + MSG_DONTWAIT equ 64 ; application constants HEX_TABLE db "0123456789ABCDEF", 0 @@ -131,6 +132,8 @@ section .data l_s_blocking_read equ $ - s_blocking_read s_received_bytes db "[udp] received bytes: " l_s_received_bytes equ $ - s_received_bytes + s_udp_error db "[udp] error: " + l_s_udp_error equ $ - s_udp_error s_packer_size db "[packer] amount of bytes packed: " l_s_packer_size equ $ - s_packer_size @@ -440,6 +443,7 @@ gametick: ; gametick ; ; main gameloop using recursion + call pump_network call keypresses jmp gametick diff --git a/src/udp.asm b/src/udp.asm index e170cc5..f609237 100644 --- a/src/udp.asm +++ b/src/udp.asm @@ -26,12 +26,20 @@ recv_udp: movzx rdi, byte [socket] ; then only set the lowest byte lea rsi, udp_recv_buf mov rdx, NET_MAX_PACKETSIZE + ; flags xor r10, r10 + mov r10, MSG_DONTWAIT lea r8, udp_srv_addr lea r9, max_sockaddr_read_size syscall mov [udp_read_len], rax + ; error checking + test rax, rax + ; if recvfrom returned negative + ; we do not process the udp payload + js .recv_udp_error + ; debug print print s_received_bytes mov rax, [udp_read_len] @@ -39,6 +47,10 @@ recv_udp: call print_newline ret +.recv_udp_error: + print s_udp_error + call print_newline + ret send_udp: ; send_udp [rax] [rdi]