pty bugs & features
Boyd Roberts
boyd at necisa.ho.necisa.oz
Mon Aug 27 11:37:19 AEST 1990
In article <3954 at auspex.auspex.com> guy at auspex.auspex.com (Guy Harris) writes:
>
>It could be. Unfortunately, just about *any* close behavior is going to
>screw *somebody*.
>
This is the _classic_ `virtual circuit problem'. The problem of
deciding what is circuit shutdown [error] and what is end of data,
and which is appropriate. You've got to make _all_ the right choices,
and some of them are _hard_.
The way I like to think about it is the way pipes work. A close
on a pipe indicates EOF to the reader. But, a write on a pipe
with no one to read it is an error (SIGPIPE/EPIPE). But, to
generalise this correctly you need to be able to say `kill this
circuit for me because an error's occurred', so that one
end can say to the other that somethings up.
I say that each protocol layer should be self contained and _clean_.
Now, the ISO people are not going to like this, but with virtual
circuits you require two ways to shutdown a circuit at the protocol
level itself, and not make it the responsibility of the layer above.
I remember all too well the existential horror when I realised (while
writing this X.25 `spool across the wire' print server/client) that
when I said close() it shut the circuit down -- _right now_!! No
waiting for the data to arrive at the other end -- nothing. I had
to write this _revolting_ gore, using the Q bit to say:
X.25 software ABC X.25 software DEF
Client: write(You got that?|Q_BIT)
Server: read() You got that?|Q_BIT
Server: write(I got it|Q_BIT)
Server: hangup circuit after `I got it'
is delivered
Client: read() I got it|Q_BIT
Client: close() Server: close()
Client: exit() Server: Loop
I didn't want to write any file transfer protocol -- why should I? After
all, I was using a reliable, sequenced, unduplicated, connection based
virtual circuit. I just wanted close() to block correctly and for a
subsequent server read() to return 0. But, X.25 software ABC had an
`interesting' idea about virtual circuits.
So I got to thinking that this was just _wrong_ and that Dennis* did it right.
Boyd Roberts boyd at necisa.ho.necisa.oz.au
``When the going gets wierd, the weird turn pro...''
* pure, vanilla, no foul gore, straight streaming V8 stream code
More information about the Comp.unix.wizards
mailing list