#!/usr/bin/env expect # # slow echo server, for when one needs to trickle data slowly to a # client (possibly to see if that client makes rash assumptions about # what a read buffer will contain) package require Tcl 8.5 set host [lindex $argv 0] set port [lindex $argv 1] set echo [lindex $argv 2] set wait [lindex $argv 3] if {$port eq ""} { set port 7777 } if {$host eq ""} { set sockargs [list handling $port] } else { set sockargs [list handling -myaddr $host $port] } if {$echo eq ""} { set echo "echo\n" } if {$wait eq ""} { set wait 1000 } proc send_char {args} { global wait set args [lassign $args fh c] if {[catch {puts -nonewline $fh $c}]} { close $fh return } if {[llength $args] == 0} { close $fh return } after $wait send_char $fh $args } proc handling {fh host port} { global wait echo # NOTE this uses the "default system encoding", see chan(n) chan configure $fh -buffering none after $wait send_char $fh [split $echo ""] } if {[catch {socket -server {*}$sockargs} msg]} { puts stderr "slow-echo-server: $msg" exit 1 } vwait godot