diff options
| author | Jake Zerrer <him@jakezerrer.com> | 2025-07-28 13:35:27 -0400 |
|---|---|---|
| committer | Jake Zerrer <him@jakezerrer.com> | 2025-07-28 13:35:27 -0400 |
| commit | 9853e1abec320b7018dd2b976280cddfb52ba153 (patch) | |
| tree | e96182d09047f73a61fda5f8756d7c10b9f0c815 | |
Initial commit
| -rwxr-xr-x | index.sh | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/index.sh b/index.sh new file mode 100755 index 0000000..3133a2a --- /dev/null +++ b/index.sh @@ -0,0 +1,47 @@ +#!/bin/zsh + +SCRIPT_FILE="$0" +SCRIPT_CONTENT=$(<"$SCRIPT_FILE") + +http_response() { + local content_length=$(wc -c < "$SCRIPT_FILE") + printf "HTTP/1.1 200 OK\r\n" + printf "Content-Type: text/plain\r\n" + printf "Content-Length: %d\r\n" "$content_length" + printf "Connection: close\r\n" + printf "\r\n" + printf "%s" "$SCRIPT_CONTENT" +} + +handle_client() { + while tcp_read; do + line=${TCP_LINE%$'\r'} + [[ -z "$line" ]] && break + done + + tcp_send "$(http_response)" + + tcp_close +} + +# Load zsh's TCP module and functions +zmodload zsh/net/tcp +autoload -U tcp_open tcp_read tcp_send tcp_close + +# Clean up background processes on exit +cleanup() { + jobs -p | xargs -r kill + tcp_close -a + exit 0 +} +trap cleanup INT TERM + +# Create listening socket once +ztcp -l 8082 +server_fd=$REPLY + +while true; do + if tcp_open -a $server_fd; then + handle_client + fi +done |
