x64-httpd/server.s

69 lines
1.1 KiB
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 r15
mov r15, rax
mov rdi, r15
call nonblocking
mov rdi, r15
call make_sockaddr
mov rax, SYS_BIND
mov rdi, r15
mov rsi, sockaddr
mov rdx, sockaddr_size
syscall
mov rax, SYS_LISTEN
mov rdi, r15
mov rsi, 100
syscall
mov rax, r15
pop r15
ret
; rdi - fd
nonblocking:
push r15
mov r15, rdi
mov rax, SYS_FCNTL
mov rdi, r15
mov rsi, F_GETFL
syscall
mov r10, rax
or r10, O_NONBLOCK
mov rax, SYS_FCNTL
mov rdi, r15
mov rsi, F_SETFL
mov rdx, r10
syscall
pop r15
ret
make_sockaddr:
mov word [sockaddr], AF_UNIX
mov r10, 0
make_sockaddr__copy_server_path:
cmp r10, server_path_len
jge return
mov r8b, [server_path + r10]
mov [sockaddr + 2 + r10], r8b
add r10, 1
jmp make_sockaddr__copy_server_path