nonblocking socket
This commit is contained in:
parent
fbd0c7735b
commit
80ecf726e7
2 changed files with 43 additions and 9 deletions
|
@ -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
51
hello.s
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue