Go to main content

man pages section 1: User Commands

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

fblocked (1t)

Name

fblocked - able input

Synopsis

fblocked channelId

Description

fblocked(1t)                 Tcl Built-In Commands                fblocked(1t)



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


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:


       +---------------+------------------+
       |ATTRIBUTE TYPE | ATTRIBUTE VALUE  |
       +---------------+------------------+
       |Availability   | runtime/tcl-8    |
       +---------------+------------------+
       |Stability      | Uncommitted      |
       +---------------+------------------+

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

KEYWORDS
       blocking, nonblocking



NOTES
       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This     software     was    built    from    source    available    at
       https://github.com/oracle/solaris-userland.   The  original   community
       source was downloaded from  http://prdownloads.sourceforge.net/tcl/tcl-
       core8.6.7-src.tar.gz.

       Further information about this software can be found on the open source
       community website at https://www.tcl.tk/.



Tcl                                   7.5                         fblocked(1t)