on Mac OS X, trying to read e.g. from stdout when it is a
pipe will not fail as on other platforms but block forever in
the recv() in TcpInputProc().
this has been a long standing very annoying bug that
among others things interferes with the workings of 'make
test', e.g. "test io-32.1" will hang when it tries to [read
stdout] because stdout is a pipe when io.test is run from
I have now found an effective & simple workaround that
AFAICT does not have any negative implications on other
when creating a socket channel in Tcl_MakeFileChannel(),
the mode argument cannot be passed to
Tcl_MakeTcpClientChannel() as noted in the comments.
I've now added a static MakeTcpClientChannelMode()
taking a mode argument and use this from
Tcl_MakeTcpClientChannel() simply calls through to
MakeTcpClientChannelMode() with the default mode.
so for writeonly files like stdout, the channel will now be
marked as writeonly even when it is based on a socket fd,
and thus reading from the channel will fail before the recv()
is ever attempted, thus working around the macosx
c.f. attached patch for implementation.