Posted to tcl by crshults at Wed Dec 03 19:10:45 GMT 2014view raw
- #I tried to whittle this as small as I could
- #This works in all versions (see below for non-working version):
- proc read_sock {channel} {puts [chan read $channel]}
- proc accept {channel address port} {
- puts "accept $channel $address $port"
- chan configure $channel -blocking no -buffering none -encoding iso8859-1 -translation binary
- chan event $channel readable "read_sock $channel"
- }
- set ssock [socket -server accept 9900]
- proc connection_result {channel} {
- puts -nonewline "connection_result: "
- if {[chan configure $channel -error] == ""} {
- puts connected
- } else {
- puts "not connected"
- chan event $channel readable {}
- }
- chan event $channel writable {}
- }
- set csock1 [socket -async localhost 9901]
- chan configure $csock1 -blocking no -buffering none -encoding iso8859-1 -translation binary
- chan event $csock1 readable "read_sock $csock1"
- chan event $csock1 writable "connection_result $csock1"
- after 10000 {puts "This message will appear in 10 seconds"}
- vwait forever
- #end of working version
- #Begin broken version
- #This works in:
- #ActiveTcl8.6.1.0.297577-win32-ix86-threaded
- #but is broken in:
- #ActiveTcl8.6.2.0.298433-win32-ix86-threaded
- #ActiveTcl8.6.3.0.298612-win32-ix86-threaded
- proc read_sock {channel} {puts [chan read $channel]}
- proc accept {channel address port} {
- puts "accept $channel $address $port"
- chan configure $channel -blocking no -buffering none -encoding iso8859-1 -translation binary
- chan event $channel readable "read_sock $channel"
- }
- set ssock [socket -server accept 9902]
- proc connection_result {channel} {
- puts -nonewline "connection_result: "
- if {[chan configure $channel -error] == ""} {
- puts connected
- } else {
- puts "not connected"
- chan event $channel readable {}
- }
- chan event $channel writable {}
- }
- set csock1 [socket -async localhost 9903]
- chan configure $csock1 -blocking no -buffering none -encoding iso8859-1 -translation binary
- chan event $csock1 readable "read_sock $csock1"
- chan event $csock1 writable "connection_result $csock1"
- #connect up a client prior to entering the vwait
- set csock2 [socket localhost 9902]
- chan configure $csock2 -blocking no -buffering none -encoding iso8859-1 -translation binary
- chan event $csock2 readable "read_sock $csock2"
- after 10000 {puts "This message will never appear"}
- vwait forever
Comments
Posted by crshults at Wed Dec 03 19:36:48 GMT 2014 [text] [code]
after 1100 { set csock2 [socket localhost 9902] chan configure $csock2 -blocking no -buffering none -encoding iso8859-1 -translation binary chan event $csock2 readable "read_sock $csock2" } after 10000 {puts "This message will appear now because the delay was added"}