diff options
author | Steve Bennett <steveb@workware.net.au> | 2011-11-08 17:56:11 +1000 |
---|---|---|
committer | Steve Bennett <steveb@workware.net.au> | 2019-07-01 11:14:58 +1000 |
commit | fe8bab1cc313d0049bbb839589c68059807518c8 (patch) | |
tree | 53a089d480d57903b004065acda88870f4ad5f4e /examples/unix.server | |
parent | eb6b2dcdc6345acd09ae593469abaf76b6b6fdfe (diff) | |
download | jimtcl-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.server | 48 |
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 +} |