say goodbye to clients then close socket

This commit is contained in:
root 2025-05-07 14:20:06 +00:00
parent 1cf28e9565
commit f096cb00e7
3 changed files with 53 additions and 19 deletions

44
main.s
View file

@ -3,10 +3,12 @@ global _start
; constants
SYS_READ equ 0
SYS_WRITE equ 1
SYS_CLOSE equ 3
SYS_POLL equ 7
SYS_SENDFILE equ 40
SYS_SOCKET equ 41
SYS_ACCEPT equ 43
SYS_SHUTDOWN equ 48
SYS_BIND equ 49
SYS_LISTEN equ 50
SYS_EXIT equ 60
@ -20,6 +22,7 @@ F_SETFL equ 4
O_NONBLOCK equ 2048
POLLIN equ 1
POLLOUT equ 4
SHUT_RDWR equ 2
pollfd_size equ 4 + 2 + 2 ; $ man 2 poll
pollfds_capacity equ 100
@ -28,6 +31,8 @@ SECTION .data
server_path db "server.sock", 0x00
server_path_len equ $ - server_path
sockaddr_size equ 2 + 108 ; $ man 7 unix
goodbye db "goodbye", 0x0a
goodbye_len equ $ - goodbye
SECTION .bss
sockaddr resb sockaddr_size
@ -36,8 +41,11 @@ pollfds_len resb 8
SECTION .text
return:
ret
%include "server.s"
;%include "pollfds_remove.s"
%include "pollfds_remove.s"
_start:
call make_server
@ -71,17 +79,44 @@ pollfds__scan__loop:
jmp pollfds__scan__loop
pollfds__scan__found:
mov r14, 0
mov r14d, [pollfds + r15 * pollfd_size]
cmp r14d, edi
je pollfds__scan__found__server
pollfds__scan__found__client:
jmp exit
push rdi
mov rax, SYS_WRITE
mov rdi, 0
mov edi, r14d
mov rsi, goodbye
mov rdx, goodbye_len
syscall
cmp rax, 0
jl exit
mov rax, SYS_SHUTDOWN
mov rdi, 0
mov edi, r14d
mov rsi, SHUT_RDWR
syscall
mov rax, SYS_CLOSE
mov rdi, 0
mov edi, r14d
syscall
mov rdi, r14
call pollfds__remove
pop rdi
jmp pollfds__scan__loop
pollfds__scan__found__server:
mov rax, SYS_ACCEPT
push rdi
mov rax, SYS_ACCEPT
mov rsi, 0
mov rdx, 0
syscall
@ -106,9 +141,6 @@ pollfds__append:
mov [pollfds_len], r10
ret
return:
ret
exit:
mov rax, SYS_EXIT
mov rdi, 0