fblocked(3tcl)



NAME

   fblocked  -  Test  whether  the  last  input  operation  exhausted  all
   available input

SYNOPSIS

   fblocked channelId
______________________________________________________________________________

DESCRIPTION

   The fblocked command returns 1 if the most recent  input  operation  on
   channelId   returned   less  information  than  requested  because  all
   available input was exhausted.  For example, if gets  is  invoked  when
   there  are only three characters available for input and no end-of-line
   sequence, 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
   standard channel (stdin, stdout, or stderr), the return value  from  an
   invocation  of  open  or  socket,  or  the result of a channel creation
   command provided by a Tcl extension.

EXAMPLE

   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 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 {![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 incoming connections...
          socket -server connect 12345
          vwait forever

SEE ALSO

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

KEYWORDS

   blocking, nonblocking




Free and Open Source Software


Free Software Video

Useful Programs

Free Online Courses

Open Opportunity

Open Business