echo then close connection
This commit is contained in:
parent
60e9bcf95c
commit
d54596514c
2 changed files with 83 additions and 7 deletions
54
main.s
54
main.s
|
@ -24,8 +24,10 @@ POLLIN equ 1
|
|||
POLLOUT equ 4
|
||||
SHUT_RDWR equ 2
|
||||
|
||||
pollfd_size equ 4 + 2 + 2 ; $ man 2 poll
|
||||
pollfds_capacity equ 100
|
||||
pollfd_size equ 4 + 2 + 2 ; $ man 2 poll
|
||||
pollfds_capacity equ 100
|
||||
client_size equ 1 + 256 + 256 ; state, line buffer, uri
|
||||
clients_capacity equ pollfds_capacity - 1
|
||||
|
||||
SECTION .data
|
||||
server_path db "server.sock", 0x00
|
||||
|
@ -33,15 +35,18 @@ server_path_len equ $ - server_path
|
|||
sockaddr_size equ 2 + 108 ; $ man 7 unix
|
||||
goodbye db "goodbye", 0x0a
|
||||
goodbye_len equ $ - goodbye
|
||||
pollfds_len dq 0
|
||||
clients_len dq 0
|
||||
|
||||
SECTION .bss
|
||||
sockaddr resb sockaddr_size
|
||||
pollfds resb pollfd_size * pollfds_capacity
|
||||
pollfds_len resb 8
|
||||
clients resb (4 + client_size) * clients_capacity
|
||||
|
||||
SECTION .text
|
||||
|
||||
%include "server.s"
|
||||
%include "readline.s"
|
||||
|
||||
_start:
|
||||
call make_server
|
||||
|
@ -84,11 +89,27 @@ pollfds__scan__found__client:
|
|||
; TODO check r10w, incl for POLLNVAL & POLLERR
|
||||
push rdi
|
||||
|
||||
mov rdi, r14
|
||||
call clients__append
|
||||
|
||||
mov r12, [clients_len]
|
||||
add r12, -1
|
||||
imul r12, client_size
|
||||
add r12, clients
|
||||
add r12, 4
|
||||
|
||||
mov rdi, r14
|
||||
mov rsi, r12
|
||||
mov rdx, 256
|
||||
call readline
|
||||
cmp rax, 0 ; TODO
|
||||
jl exit
|
||||
;push rax ; TODO
|
||||
|
||||
mov rdx, rax
|
||||
mov rax, SYS_WRITE
|
||||
mov rdi, 0
|
||||
mov edi, r14d
|
||||
mov rsi, goodbye
|
||||
mov rdx, goodbye_len
|
||||
mov rdi, r14
|
||||
mov rsi, r12
|
||||
syscall
|
||||
cmp rax, 0
|
||||
jl exit ; TODO handle this gracefully
|
||||
|
@ -132,6 +153,7 @@ pollfds__scan__found__server:
|
|||
; edi - fd
|
||||
; si - events
|
||||
pollfds__append:
|
||||
; TODO check against pollfds_capacity
|
||||
mov r10, [pollfds_len]
|
||||
mov [pollfds + r10 * pollfd_size], edi
|
||||
mov [pollfds + r10 * pollfd_size + 4], si
|
||||
|
@ -157,6 +179,24 @@ pollfds__clear:
|
|||
mov [pollfds_len], r10
|
||||
ret
|
||||
|
||||
; esi - fd
|
||||
clients__append:
|
||||
; TODO check against client_capacity
|
||||
mov r10, [clients_len]
|
||||
imul r10, client_size
|
||||
add r10, clients
|
||||
mov [r10], esi
|
||||
add r10, 4
|
||||
mov r8b, 0
|
||||
mov r11, 0
|
||||
|
||||
clients__append__init:
|
||||
cmp r11, client_size
|
||||
jge return
|
||||
mov [r10 + r11], r8b
|
||||
add r11, 1
|
||||
jmp clients__append__init
|
||||
|
||||
return:
|
||||
ret
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue