simple gopher server implimentation
This commit is contained in:
commit
87e8caede8
|
@ -0,0 +1,45 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -x
|
||||
|
||||
createsrv () {
|
||||
# $1 - port
|
||||
# $2 - write location
|
||||
# $3 - read location
|
||||
[ -p "$2" ] || mkfifo "$2"
|
||||
[ -e "$3" ] || touch "$3"
|
||||
|
||||
nc -l "$1" <"$2" >>"$3" & exec 3>"$2"
|
||||
}
|
||||
writefile () {
|
||||
# $1 - file
|
||||
foo cat "$1" >&3
|
||||
}
|
||||
ioblock () {
|
||||
# $1 - io to block
|
||||
while [ "$(wc -l $1 | awk -F' ' '{print $1}')" -eq 0 ]; do :; done
|
||||
}
|
||||
ioflush () {
|
||||
# $1 - io to flush
|
||||
rm "$1"
|
||||
touch "$1"
|
||||
}
|
||||
mktmp () {
|
||||
t=$(mktemp)
|
||||
rm "$t"
|
||||
mkdir "$t"
|
||||
printf "%s\n" "$t"
|
||||
}
|
||||
tmplocation=$(mktmp)
|
||||
writelocation="${tmplocation}/write"
|
||||
readlocation="${tmplocation}/read"
|
||||
|
||||
createsrv 70 "${writelocation}" "${readlocation}"
|
||||
printf "server created\n"
|
||||
while true; do
|
||||
ioblock "${readlocation}"
|
||||
printf "iHello there! This is a test\tfake\t\t0\r\n.\r\n" >&3
|
||||
printf "file served\n"
|
||||
ioflush "${readlocation}"
|
||||
done
|
||||
exit 1
|
Reference in New Issue