succeed at finding EAGAIN by experiment: -11
This commit is contained in:
parent
56715c3079
commit
2a59922c01
1 changed files with 92 additions and 0 deletions
92
eagain.s
Normal file
92
eagain.s
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
global _start
|
||||||
|
|
||||||
|
; constants
|
||||||
|
SYS_WRITE equ 1
|
||||||
|
SYS_SOCKET equ 41
|
||||||
|
SYS_CONNECT equ 42
|
||||||
|
SYS_SHUTDOWN equ 48
|
||||||
|
SYS_FCNTL equ 72
|
||||||
|
SYS_EXIT equ 60
|
||||||
|
AF_UNIX equ 1
|
||||||
|
SOCK_STREAM equ 1
|
||||||
|
F_GETFL equ 3
|
||||||
|
F_SETFL equ 4
|
||||||
|
O_NONBLOCK equ 2048
|
||||||
|
SHUT_RDWR equ 2
|
||||||
|
|
||||||
|
SECTION .data
|
||||||
|
server_path db "eagain.sock", 0x00
|
||||||
|
server_path_len equ $ - server_path
|
||||||
|
sockaddr_size equ 2 + 108 ; $ man 7 unix
|
||||||
|
|
||||||
|
SECTION .bss
|
||||||
|
sockaddr resb sockaddr_size
|
||||||
|
spam resb 0xffff
|
||||||
|
|
||||||
|
SECTION .text
|
||||||
|
|
||||||
|
_start:
|
||||||
|
mov rax, SYS_SOCKET
|
||||||
|
mov rdi, AF_UNIX
|
||||||
|
mov rsi, SOCK_STREAM
|
||||||
|
mov rdx, 0
|
||||||
|
syscall
|
||||||
|
|
||||||
|
mov r15, rax
|
||||||
|
|
||||||
|
call nonblocking
|
||||||
|
call make_sockaddr
|
||||||
|
|
||||||
|
mov rax, SYS_CONNECT
|
||||||
|
mov rdi, r15
|
||||||
|
mov rsi, sockaddr
|
||||||
|
mov rdx, sockaddr_size
|
||||||
|
syscall
|
||||||
|
|
||||||
|
loop:
|
||||||
|
mov rax, SYS_WRITE
|
||||||
|
mov rdi, r15
|
||||||
|
mov rsi, spam
|
||||||
|
mov rdx, 0xffff
|
||||||
|
syscall
|
||||||
|
|
||||||
|
cmp rax, 0
|
||||||
|
jge loop
|
||||||
|
|
||||||
|
mov rax, SYS_EXIT
|
||||||
|
mov rdi, 1
|
||||||
|
syscall
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
return:
|
||||||
|
ret
|
Loading…
Add table
Add a link
Reference in a new issue