---
name: "fblocked"
section: "3tcl"
platform: "linux"
package: "tcl8.6-doc"
version: "8.6.16+dfsg-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/fblocked"
---

# fblocked(3tcl)

Test whether the last input operation exhausted all available input

## 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)](/gets/3tcl.md), [open(3tcl)](/open/3tcl.md), [read(3tcl)](/read/3tcl.md), [socket(3tcl)](/socket/3tcl.md), [Tcl\_StandardChannels(3tcl)](/Tcl_StandardChannels/3tcl.md)

## KEYWORDS

blocking, nonblocking
