Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
fblocked(n)		     Tcl Built-In Commands		   fblocked(n)

       fblocked	 -  Test whether the last input	operation exhausted all	avail-
       able input

       fblocked	channelId

       The fblocked command returns 1 if the most recent  input	 operation  on
       channelId  returned  less information than requested because all	avail-
       able input was exhausted.  For example, if gets is invoked  when	 there
       are  only  three	 characters available for input	and no end-of-line se-
       quence, gets returns an empty string and	a subsequent call to  fblocked
       will return 1.

       ChannelId must be an identifier for an open channel such	as a Tcl stan-
       dard channel (stdin, stdout, or stderr),	the return value from an invo-
       cation  of  open	or socket, or the result of a channel creation command
       provided	by a Tcl extension.

       The fblocked  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:

       # This is called	whenever a new client connects to the server proc con-
       nect {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 {![fblocked	$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  in-
       coming connections...  socket -server connect 12345 vwait forever

       gets(n),	open(n), read(n), socket(n), Tcl_StandardChannels(3)

       blocking, nonblocking

Tcl				      7.5			   fblocked(n)


Want to link to this manual page? Use this URL:

home | help