Implement shutdown, as required by mirage-flow 4.0.0 #512
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Would be great to have a review on this.
close
From my understanding, in the UNIX sockets API the SO_LINGER is relevant (to specify how long
close()
may block) - since we don't have SO_LINGER, let's just care about the normal case (text paraphrased from https://www.cl.cam.ac.uk/~pes20/Netsem/alldoc.pdf):If I understand, our
flow
is never a listening socket. Ourunlisten
eventually should care about the last point.shutdown
Depending on
`read | `write | `read_write
, the specific half is shut down:TL;DR
There's some discrepancy from my intuition (and the man page shutdown(2) SHUT_RD and the model: according to the man page) "Further receives will be disallowed". In this PR, I push None to the Lwt_dllist -- with the hope that this leads to the expected behaviour (those who have knowledge about the internals should comment whether there's something else that needs to be done).