#!/usr/local/bin/tclsh
# $Id: echo.tcl,v 1.1 2001/03/02 04:05:06 doug Exp $
# http://www.bagley.org/~doug/shootout/
# from: Kristoffer Lawson
proc newClient {sock addr port} {
fconfigure $sock -buffering line
set r [gets $sock]
set rLength 0
while {![eof $sock]} {
incr rLength [string length $r]
# Extra increase because [gets] doesn't return \n
incr rLength
puts $sock $r
set r [gets $sock]
}
puts "server processed $rLength bytes"
exit
}
proc runClient {n addr port} {
set sock [socket $addr $port]
fconfigure $sock -buffering line
set msg "Hello there sailor"
while {$n} {
puts $sock $msg
if {[gets $sock] != $msg} {
error "Received different message: $r."
}
incr n -1
}
}
set n [lindex $argv 0]
if {[llength $argv] < 2} {
socket -server newClient 10000
exec tclsh83 [info script] $n client &
vwait forever
} else {
runClient $n localhost 10000
}