x64-httpd/server.s
2025-05-07 11:38:56 +00:00

61 lines
999 B
ArmAsm

; Returns (in rax) the server's file descriptor
make_server:
mov rax, SYS_UNLINK
mov rdi, server_path
syscall
mov rax, SYS_SOCKET
mov rdi, AF_UNIX
mov rsi, SOCK_STREAM
mov rdx, 0
syscall
push rax
call nonblocking
call make_sockaddr
pop r10
mov rax, SYS_BIND
mov rdi, r10
mov rsi, sockaddr
mov rdx, sockaddr_size
syscall
mov rax, SYS_LISTEN
mov rdi, r10
mov rsi, 100
syscall
mov rax, r10
ret
nonblocking:
mov r10, rax
mov rax, SYS_FCNTL
mov rdi, r10
mov rsi, F_GETFL
syscall
mov r11, rax
xor r11, O_NONBLOCK
mov rax, SYS_FCNTL
mov rdi, r10
mov rsi, F_SETFL
mov rdx, r11
syscall
ret
make_sockaddr:
mov word [sockaddr], AF_UNIX
mov rax, 0
make_sockaddr__copy_server_path:
cmp rax, server_path_len
jge return
mov r10, [server_path + rax]
mov [sockaddr + rax + 2], r10
add rax, 8
jmp make_sockaddr__copy_server_path