aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2010-08-31 07:15:05 +1000
committerSteve Bennett <steveb@workware.net.au>2010-10-15 11:02:51 +1000
commita6b5998b080aac77c1b6151b97a64b0d79f3586f (patch)
tree3112f9646a161fd503c2afefffdf82b3abc55f7e /examples
parentcbc635e8f4de48408768053a976dc7bd7177ba7a (diff)
downloadjimtcl-a6b5998b080aac77c1b6151b97a64b0d79f3586f.zip
jimtcl-a6b5998b080aac77c1b6151b97a64b0d79f3586f.tar.gz
jimtcl-a6b5998b080aac77c1b6151b97a64b0d79f3586f.tar.bz2
Add basic ipv6 support to Jim
Use -ipv6 to signify that ipv6 should be used Signed-off-by: Steve Bennett <steveb@workware.net.au>
Diffstat (limited to 'examples')
-rw-r--r--examples/sqlite3.tcl8
-rw-r--r--examples/udp.client18
-rw-r--r--examples/udp.server2
-rw-r--r--examples/udp6.client27
-rw-r--r--examples/udp6.server26
5 files changed, 79 insertions, 2 deletions
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