; 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