I finished a first cut handling an EOF after configuration. It took me
a little long than expected because the Tops-20 DAP engine implements a
kind of nifty finite state machine to handle DAP function requests. The
way it works is that you are either waiting on a read or waiting to
write. The former means you've written something to the network and are
waiting for a response, whilst the latter means you have the go-ahead to
write, but you are getting the data ready and will shortly be writing
something.
Once the final Access Complete message is sent by the FAL process, it
technically might have something further to read, if it were the case
that the NFT process had something else for it to do. However, what it
does instead of waiting on a read, is poll for data and, if there is
any, it goes and does the function. A disconnection at this point is
considered acceptable.
So I put in code to check to see if an EOF is hit after the finite state
machine has exited the configuration state. If this happens, I attempt
to log something 'clever'. It can be seen the the Tops-20 NFT client is
sending some disconnect text to attempt to inform that the remote FAL
that the connect was merely because of a configuration query.
4-Jun-2023 00:20:34 File Access Listener 2 Connection from node
*VENTI2* for user Anonymous
4-Jun-2023 00:20:34 File Access Listener 2 Validated node *VENTI2*
for user id OINKY
Post Configuration close: "/ConfigQueryOnly/", Reason: 42
(Confirmation of Disconnect Initiate)
4-Jun-2023 00:25:01 File Access Listener 1 Connection from node
*MIM* for user Anonymous
4-Jun-2023 00:25:01 File Access Listener 1 Validated node *MIM*
for user id Anonymous
Post Configuration close; Code: 0, Reason: No error
The question in my mind is what disconnect code to use, if any. I had
initially thought a 42 was the thing to do, but the more I think about
it, the less correct it seems. Moreover, it can be seen that MIM:: is
closing with a zero, which indicates no error. There's certainly the
case for that, but I'm wondering whether the question remains as to
whether this early termination is something to be signaled on the
disconnect.
I don't suppose there are any other DAP clients that do what RSX and
Tops-20 NFT do?
I did come up with a possible use case where you would want to connect,
query the configuration and use that to decide whether to proceed
further. It's simply that you need to use a resource or perform a
function that you are not going to bother to do if the machine can't do
it. So that sounds like a variation of an availability scenario, albeit
contrived, perhaps.
------------------------------------------------------------------------
On 6/2/23 2:13 PM, Paul Koning wrote:
Good point. The spec is no help here. The protocol description (DAP 5.6.0 section
5.1.2) shows that client and server send config messages after the NSP connection is
opened. But then part 3(c) shows a config exchange immediately followed by an NSP
disconnect as a the scenario for the client deciding the server's config message is
invalid. That's really a spec error; there is no way I see in the protocol to open a
connection and then decide not to do any data operations after all.
So given that bug in the spec, suppressing the error log message is the right answer. I
see I did the same in PyDECnet: after the config exchange, it looks for a message to say
what data transfer to do. A disconnect at that point simply causes FAL to exit.
> ------------------------------------------------------------------------
> On Jun 2, 2023, at 12:14 PM, Thomas DeBellis<tommytimesharing(a)gmail.com>
wrote:
>
> Yes, there is always some poor soul who will haplessly manage to trip over cables,
even if they are under a raised floor. So, there is that--connections can drop.
>
> That wasn't quite what I was getting at. What I meant was generating an error
condition which maybe ought not be there had the closure been done 'the right
way'. Right now, because I just punt the connection as soon as I get the
configuration goodies, I see a premature EOF in my log files. Not the end of the world,
but I was wondering about not having it be there.
>
> So I was thinking about sending an access complete message after the configuration
exchange, but that doesn't seem to be what it was designed for in this case.
>
> The last part of section 5.1 seems to imply that a disconnect after a configuration
exchange should be rare as errors will be rare due to the "canned" responses.
So maybe I'm thinking about this the wrong way.
>
> Another approach would just be to not log a premature-EOF error on a disconnect after
a configuration exchange. I'll look into that.