To begin with, I was looking at closure of the wrong port. Fixing
that, however, still left me with the problem that there was no event
for closure of the downstream port that I could use, so the
input-cooker has to poll to see if downstream has indicated that it
should be shut down. Finally, the actual port-closing code was doing
different things in different cases, so I've straightened that out as
well, and there was a race between closing raw-out in the
output-cooker and writing some feedback to it in the input-cooker, so
I've added a with-handlers to ignore write errors in the input-cooker.