When a hypercall-initiated read on a network device returns 0 (EOF) the tender returns SOLO5_R_AGAIN. In mirage-net-solo5 this results in listen retrying the read. If the file descriptor is really closed this will end in an infinite loop.
The spt target does not do anything special in the case of read(2) returns 0 as far as I can tell.
It is unclear to me if a file descriptor for a tap device could ever return EOF. I observe this by abusing the file descriptor mechanism for passing network devices in https://github.com/reynir/mirage-cat
When a hypercall-initiated read on a network device returns 0 (EOF) the tender returns
SOLO5_R_AGAIN
. In mirage-net-solo5 this results inlisten
retrying the read. If the file descriptor is really closed this will end in an infinite loop.https://github.com/Solo5/solo5/blob/bf29b8af11feec9dbc2e74ccdc69bc1e0cbf5dfe/tenders/hvt/hvt_module_net.c#L77-L82
The spt target does not do anything special in the case of
read(2)
returns 0 as far as I can tell.It is unclear to me if a file descriptor for a tap device could ever return EOF. I observe this by abusing the file descriptor mechanism for passing network devices in https://github.com/reynir/mirage-cat