DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

/usr/gnu/man2/cat.n/fblocked.n.Z(/usr/gnu/man2/cat.n/fblocked.n.Z)




______________________________________________________________________________


NAME

       fblocked  -  Test whether the last input operation exhausted all avail-
       able 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 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
       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 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.


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(n), open(n), read(n), socket(n), Tcl_StandardChannels(3)


KEYWORDS

       blocking, nonblocking

Tcl                                   7.5                          fblocked(n)

Man(1) output converted with man2html