diff options
author | dkf <donal.k.fellows@manchester.ac.uk> | 2004-10-27 12:52:31 (GMT) |
---|---|---|
committer | dkf <donal.k.fellows@manchester.ac.uk> | 2004-10-27 12:52:31 (GMT) |
commit | 3ec9fd99b36055e6d272e64c1de04a93fdc9416b (patch) | |
tree | 3ed6ba33b7a0eb1bb7d89c83f86bb2f420d5284a /doc/fblocked.n | |
parent | c782c91eb43cbb2f3c6d387ce7c124c770bb7191 (diff) | |
download | tcl-3ec9fd99b36055e6d272e64c1de04a93fdc9416b.zip tcl-3ec9fd99b36055e6d272e64c1de04a93fdc9416b.tar.gz tcl-3ec9fd99b36055e6d272e64c1de04a93fdc9416b.tar.bz2 |
More doc fix backporting
Diffstat (limited to 'doc/fblocked.n')
-rw-r--r-- | doc/fblocked.n | 38 |
1 files changed, 36 insertions, 2 deletions
diff --git a/doc/fblocked.n b/doc/fblocked.n index 7f8fe54..2cb7d85 100644 --- a/doc/fblocked.n +++ b/doc/fblocked.n @@ -4,7 +4,7 @@ '\" See the file "license.terms" for information on usage and redistribution '\" of this file, and for a DISCLAIMER OF ALL WARRANTIES. '\" -'\" RCS: @(#) $Id: fblocked.n,v 1.4 2001/09/14 19:20:40 andreas_kupries Exp $ +'\" RCS: @(#) $Id: fblocked.n,v 1.4.8.1 2004/10/27 12:52:39 dkf Exp $ .so man.macros .TH fblocked n 7.5 Tcl "Tcl Built-In Commands" .BS @@ -31,9 +31,43 @@ Tcl standard channel (\fBstdin\fR, \fBstdout\fR, or \fBstderr\fR), the return value from an invocation of \fBopen\fR or \fBsocket\fR, or the result of a channel creation command provided by a Tcl extension. .VE +.SH EXAMPLE +The \fBfblocked\fR command is particularly useful when writing network +servers, as it allows you to write your code in a line-by-line style +without preventing the servicing of other connections. This can be +seen in this simple echo-service: +.PP +.CS +# This is called whenever a new client connects to the server +proc connect {chan host port} { + set clientName [format <%s:%d> $host $port] + puts "connection from $clientName" + fconfigure $chan -blocking 0 -buffering line + fileevent $chan readable [list echoLine $chan $clientName] +} + +# This is called whenever either at least one byte of input +# data is available, or the channel was closed by the client. +proc echoLine {chan clientName} { + gets $chan line + if {[eof $chan]} { + puts "finishing connection from $clientName" + close $chan + } elseif {![\fBfblocked\fR $chan]} { + # Didn't block waiting for end-of-line + puts "$clientName - $line" + puts $chan $line + } +} + +# Create the server socket and enter the event-loop to wait +# for incoming connections... +socket -server connect 12345 +vwait forever +.CE .SH "SEE ALSO" -gets(n), open(n), read(n), Tcl_StandardChannels(3) +gets(n), open(n), read(n), socket(n), Tcl_StandardChannels(3) .SH KEYWORDS blocking, nonblocking |