; 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