controlchan testing

Russ Allbery rra at stanford.edu
Wed May 9 13:03:26 UTC 2001


Marco d'Itri <md at Linux.IT> writes:

> May be. In my new programs which work as INN channels I always put:

> { my $oldfh = select STDIN; $| = 1; select $oldfh; }

> maybe it should go in controlchan too.

Hm.  I'm pretty sure that doesn't do anything.

autoflush HANDLE EXPR
$OUTPUT_AUTOFLUSH
$|      If set to nonzero, forces a flush right away and after every
        write or print on the currently selected output channel.  Default
        is 0 (regardless of whether the channel is really buffered by the
        system or not; "$|" tells you only whether you've asked Perl
        explicitly to flush after each write).  STDOUT will typically be
        line buffered if output is to the terminal and block buffered
        otherwise.  Setting this variable is useful primarily when you
        are outputting to a pipe or socket, such as when you are running
        a Perl program under rsh and want to see the output as it's
        happening.  This has no effect on input buffering.  See the getc
        entry in the perlfunc manpage for that.  (Mnemonic: when you want
        your pipes to be piping hot.)

Note the third from the last sentence.

The whole concept is also somewhat incompatible with doing line-at-a-time
reading from the input channel; you pretty much have to read ahead to find
the newline, and then there's no way to put the data back.

I think what this is arguing is that my previous assumption was wrong and
that in fact it is a problem if controlchan exits, and that controlchan
probably shouldn't do so except for some error that's completely
unrecoverable, since it could result in not processing some control
messages.

-- 
Russ Allbery (rra at stanford.edu)             <http://www.eyrie.org/~eagle/>


More information about the inn-workers mailing list