From a6b5998b080aac77c1b6151b97a64b0d79f3586f Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Tue, 31 Aug 2010 07:15:05 +1000 Subject: Add basic ipv6 support to Jim Use -ipv6 to signify that ipv6 should be used Signed-off-by: Steve Bennett --- examples/sqlite3.tcl | 8 ++++++++ examples/udp.client | 18 +++++++++++++++++- examples/udp.server | 2 +- examples/udp6.client | 27 +++++++++++++++++++++++++++ examples/udp6.server | 26 ++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 examples/sqlite3.tcl create mode 100644 examples/udp6.client create mode 100644 examples/udp6.server (limited to 'examples') diff --git a/examples/sqlite3.tcl b/examples/sqlite3.tcl new file mode 100644 index 0000000..9365cdf --- /dev/null +++ b/examples/sqlite3.tcl @@ -0,0 +1,8 @@ +set db [sqlite3.open :memory:] +$db query {CREATE TABLE plays (id, author, title)} +$db query {INSERT INTO plays (id, author, title) VALUES (1, 'Goethe', 'Faust');} +$db query {INSERT INTO plays (id, author, title) VALUES (2, 'Shakespeare', 'Hamlet');} +$db query {INSERT INTO plays (id, author, title) VALUES (3, 'Sophocles', 'Oedipus Rex');} +set res [$db query "SELECT * FROM plays"] +$db close +foreach r $res {puts $r(author)} diff --git a/examples/udp.client b/examples/udp.client index 32dbc02..da74e77 100644 --- a/examples/udp.client +++ b/examples/udp.client @@ -2,10 +2,26 @@ set s [socket dgram] -foreach i [range 1 20] { +foreach i [range 1 5] { # Specify the address and port with sendto $s sendto "$i + $i + 10" 127.0.0.1:20000 # Receive the response - max length of 100 puts [$s recvfrom 100] } + +$s close + +# Now sending via a connected udp socket + +set s [socket dgram 127.0.0.1:20000] + +foreach i [range 5 10] { + # Socket is connected, so can just use puts here + # But remember to flush to ensure that each message is separate + $s puts -nonewline "$i * $i" + $s flush + + # Receive the response - max length of 100 + puts [$s recvfrom 100] +} diff --git a/examples/udp.server b/examples/udp.server index c462647..03f41cd 100644 --- a/examples/udp.server +++ b/examples/udp.server @@ -16,7 +16,7 @@ $s readable { set result "Error: $buf => $msg" } - puts ", sending '$result'" + puts ", sending '$result' to $addr" # Send the result back to where it came from $s sendto $result $addr diff --git a/examples/udp6.client b/examples/udp6.client new file mode 100644 index 0000000..f3e680e --- /dev/null +++ b/examples/udp6.client @@ -0,0 +1,27 @@ +# Example of sending from an unconnected ipv6 socket + +set s [socket -ipv6 dgram] + +foreach i [range 1 5] { + # Specify the address and port with sendto + $s sendto "$i + $i + 10" {[::1]:20000} + + # Receive the response - max length of 100 + puts [$s recvfrom 100] +} + +$s close + +# Now sending via a connected udp socket + +set s [socket -ipv6 dgram {[::1]:20000}] + +foreach i [range 5 10] { + # Socket is connected, so can just use puts here + # But remember to flush to ensure that each message is separate + $s puts -nonewline "$i * $i" + $s flush + + # Receive the response - max length of 100 + puts [$s recvfrom 100] +} diff --git a/examples/udp6.server b/examples/udp6.server new file mode 100644 index 0000000..da9b4bf --- /dev/null +++ b/examples/udp6.server @@ -0,0 +1,26 @@ +# Example of a udp server listening on ipv6 which sends a response +# Note that on many hosts, this will also respond to ipv4 requests too + +# Listen on port 20000. +set s [socket -ipv6 dgram.server {[::]:20000}] + +# For each request... +$s readable { + # Get the request (max 80 chars) - need the source address + set buf [$s recvfrom 80 addr] + + puts -nonewline "read '$buf' from $addr" + + try { + set result "$buf = [expr $buf]" + } on error {msg} { + set result "Error: $buf => $msg" + } + + puts ", sending '$result'" + + # Send the result back to where it came from + $s sendto $result $addr +} + +vwait done -- cgit v1.1