Commit | Line | Data |
---|---|---|
c8b05198 NR |
1 | #!/bin/sh |
2 | ||
3 | # $0 [prog ($1 will be the query)] ([port]) | |
4 | ||
5 | [ "$ADDR" = "" ] && ADDR=127.0.0.1 | |
6 | [ "$LOG" = "" ] && LOG=/tmp/log.err | |
7 | [ "$PIDF" = "" ] && PIDF="`mktemp`" | |
8 | [ "$TIMEOUT" = "" ] && TIMEOUT=10 | |
9 | [ "$MAXCON" = "" ] && MAXCON=1024 | |
10 | prog="$1" | |
11 | port="$2" | |
12 | [ "$port" = "" ] && port=70 | |
13 | ||
14 | if [ "$prog" = "" ]; then | |
15 | rm "$PIDF" | |
16 | echo "Syntax: $0 [prog (\$1 will be the query)] ([port])" >&2 | |
17 | exit 1 | |
18 | fi | |
19 | ||
20 | tmpd=`mktemp -t -d .gopher-service.XXXXXX` | |
21 | if [ ! -d "$tmpd" ]; then | |
22 | rm "$PIDF" | |
23 | echo "Cannot create temporary directory, aborting..." >&2 | |
24 | exit 2 | |
25 | fi | |
26 | ||
27 | touch "$PIDF" | |
28 | echo "$PIDF" | |
29 | ||
30 | i=0 | |
31 | while [ -e "$PIDF" ]; do | |
32 | i=`expr $i + 1` | |
33 | [ $i -gt "$MAXCON" ] && i=1 | |
34 | fifo="$tmpd/fifo.$i" | |
35 | rm -f "$fifo" | |
36 | mkfifo "$fifo" | |
37 | < "$fifo" nc -l -q0 -w"$TIMEOUT" "$ADDR" -p "$port" | ( | |
38 | read -r query | |
39 | query="`echo "$query" | cut -f2 -d' '`" | |
40 | ( | |
41 | "$prog" "$query" 2>> "$LOG" | |
42 | rm "$fifo" | |
43 | )& | |
44 | ) > "$fifo" | |
45 | done | |
46 | rm -rf "$tmpd" | |
47 |