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("SOCK_STREAM %d\n", SOCK_STREAM);
|
||||||
printf("F_GETFL %d\n", F_GETFL);
|
printf("F_GETFL %d\n", F_GETFL);
|
||||||
printf("F_SETFL %d\n", F_SETFL);
|
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_BIND equ 49
|
||||||
SYS_LISTEN equ 50
|
SYS_LISTEN equ 50
|
||||||
SYS_EXIT equ 60
|
SYS_EXIT equ 60
|
||||||
|
SYS_FCNTL equ 72
|
||||||
SYS_UNLINK equ 87
|
SYS_UNLINK equ 87
|
||||||
STDOUT equ 1
|
STDOUT equ 1
|
||||||
AF_UNIX equ 1
|
AF_UNIX equ 1
|
||||||
SOCK_STREAM equ 1
|
SOCK_STREAM equ 1
|
||||||
|
F_GETFL equ 3
|
||||||
|
F_SETFL equ 4
|
||||||
|
O_NONBLOCK equ 2048
|
||||||
|
|
||||||
SECTION .data
|
SECTION .data
|
||||||
hello db "Hello world!", 0x0a
|
hello db "Hello world!", 0x0a
|
||||||
|
@ -33,6 +37,24 @@ _start:
|
||||||
mov rdx, hello_len
|
mov rdx, hello_len
|
||||||
syscall
|
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:
|
make_server:
|
||||||
mov rax, SYS_UNLINK
|
mov rax, SYS_UNLINK
|
||||||
mov rdi, server_path
|
mov rdi, server_path
|
||||||
|
@ -45,6 +67,7 @@ make_server:
|
||||||
syscall
|
syscall
|
||||||
push rax
|
push rax
|
||||||
|
|
||||||
|
call nonblocking
|
||||||
call make_sockaddr
|
call make_sockaddr
|
||||||
pop r10
|
pop r10
|
||||||
|
|
||||||
|
@ -59,18 +82,28 @@ make_server:
|
||||||
mov rsi, 100
|
mov rsi, 100
|
||||||
syscall
|
syscall
|
||||||
|
|
||||||
mov rax, SYS_ACCEPT
|
mov rax, r10
|
||||||
mov rdi, r10
|
ret
|
||||||
mov rsi, 0
|
|
||||||
mov rdx, 0
|
|
||||||
syscall
|
|
||||||
push rax
|
|
||||||
|
|
||||||
exit:
|
nonblocking:
|
||||||
mov rax, SYS_EXIT
|
mov r10, rax
|
||||||
pop rdi
|
|
||||||
|
mov rax, SYS_FCNTL
|
||||||
|
mov rdi, r10
|
||||||
|
mov rsi, F_GETFL
|
||||||
syscall
|
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:
|
make_sockaddr:
|
||||||
mov word [sockaddr], AF_UNIX
|
mov word [sockaddr], AF_UNIX
|
||||||
mov rax, 0
|
mov rax, 0
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue