aboutsummaryrefslogtreecommitdiff
path: root/examples/unix.server
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2011-11-08 17:56:11 +1000
committerSteve Bennett <steveb@workware.net.au>2019-07-01 11:14:58 +1000
commitfe8bab1cc313d0049bbb839589c68059807518c8 (patch)
tree53a089d480d57903b004065acda88870f4ad5f4e /examples/unix.server
parenteb6b2dcdc6345acd09ae593469abaf76b6b6fdfe (diff)
downloadjimtcl-fe8bab1cc313d0049bbb839589c68059807518c8.zip
jimtcl-fe8bab1cc313d0049bbb839589c68059807518c8.tar.gz
jimtcl-fe8bab1cc313d0049bbb839589c68059807518c8.tar.bz2
aio: Add dgram unix socket support
Also add support for sockname and peername And remove unix domain sockets when the socket is closed And generally clean up the socket support Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'examples/unix.server')
-rw-r--r--examples/unix.server48
1 files changed, 48 insertions, 0 deletions
diff --git a/examples/unix.server b/examples/unix.server
new file mode 100644
index 0000000..fa52992
--- /dev/null
+++ b/examples/unix.server
@@ -0,0 +1,48 @@
+# Example of a unix domain stream server which sends a response
+
+file delete unix.tmp
+set s [socket unix.server unix.tmp]
+
+puts "Listening on [$s sockname]"
+
+$s readable {
+ # Clean up children
+ wait -nohang 0
+ set sock [$s accept]
+
+ # Make this server forking so we can accept multiple
+ # simultaneous connections
+ if {[os.fork] == 0} {
+ # We don't want the unix domain path to be deleted here
+ $s close -nodelete
+
+ $sock buffering line
+
+ # Get the requests, one line at a time an evaluate
+ while {[$sock gets buf] >= 0} {
+ set buf [string trim $buf]
+ if {$buf in {? help}} {
+ set result "Enter any Tcl command to run in the server"
+ } else {
+ try {
+ set result [eval $buf]
+ set result [string map [list \\ \\\\ \n \\n \r \\r] $result]
+ } on error {msg} {
+ set result "Error: $buf => $msg"
+ }
+ }
+
+ # Send the result back to where it came from
+ $sock puts $result
+ }
+ }
+
+ $sock close
+}
+
+# Handle signals so the socket is removed on exit
+signal handle SIGINT SIGTERM
+
+catch -signal {
+ vwait done
+}