nonblocking socket

This commit is contained in:
root 2025-05-04 15:22:34 +00:00
parent fbd0c7735b
commit 80ecf726e7
2 changed files with 43 additions and 9 deletions

View file

@ -8,4 +8,5 @@ void main() {
printf("SOCK_STREAM %d\n", SOCK_STREAM);
printf("F_GETFL %d\n", F_GETFL);
printf("F_SETFL %d\n", F_SETFL);
printf("O_NONBLOCK %d\n", O_NONBLOCK);
}

51
hello.s
View file

@ -9,10 +9,14 @@ SYS_ACCEPT equ 43
SYS_BIND equ 49
SYS_LISTEN equ 50
SYS_EXIT equ 60
SYS_FCNTL equ 72
SYS_UNLINK equ 87
STDOUT equ 1
AF_UNIX equ 1
SOCK_STREAM equ 1
F_GETFL equ 3
F_SETFL equ 4
O_NONBLOCK equ 2048
SECTION .data
hello db "Hello world!", 0x0a
@ -33,6 +37,24 @@ _start:
mov rdx, hello_len
syscall
call make_server
push rax
call accept
pop r10
exit:
mov rax, SYS_EXIT
mov rdi, 0
syscall
accept:
mov rdi, rax
mov rax, SYS_ACCEPT
mov rsi, 0
mov rdx, 0
syscall
ret
make_server:
mov rax, SYS_UNLINK
mov rdi, server_path
@ -45,6 +67,7 @@ make_server:
syscall
push rax
call nonblocking
call make_sockaddr
pop r10
@ -59,18 +82,28 @@ make_server:
mov rsi, 100
syscall
mov rax, SYS_ACCEPT
mov rdi, r10
mov rsi, 0
mov rdx, 0
syscall
push rax
mov rax, r10
ret
exit:
mov rax, SYS_EXIT
pop rdi
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