summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJake Zerrer <him@jakezerrer.com>2025-07-28 13:35:27 -0400
committerJake Zerrer <him@jakezerrer.com>2025-07-28 13:35:27 -0400
commit9853e1abec320b7018dd2b976280cddfb52ba153 (patch)
treee96182d09047f73a61fda5f8756d7c10b9f0c815
Initial commit
-rwxr-xr-xindex.sh47
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