# echo_server.tcl proc Echo_Accept {sock addr port} { global echo puts "Accept $sock from $addr port $port" set echo(addr,$sock) [list $addr $port] fconfigure $sock -buffering line fileevent $sock readable [list Echo $sock] } proc Echo {sock} { global echo if {[eof $sock] || [catch {gets $sock line}]} { # end of file or lost connection close $sock puts "Close $echo(addr,$sock)" unset echo(addr,$sock) } else { if {$line == "quit"} { close $sock puts "Close $echo(addr,$sock)" unset echo(addr,$sock) } else { puts $sock $line } } } # Main # Create Server socket set echo(main) [socket -server Echo_Accept 2007] vwait forever