[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[MirageOS-devel] problem with NET=socket and multiple connections?


I am seeing some unexpected behavior with --unix and NET=socket on
Linux: it looks like the TCP server is not dealing well with multiple

The simplest repro. is with mirage-skeleton/stackv4: configure with
--unix and NET=socket.  Start the server, then open two separate
telnet connections to 8080.  The first connection is acknowledged by
the server in a log message: "new tcp from 21234", but the
second is not.  If you send a line of data via the first telnet, the
first connection is closed (as expected)... and only then does the
server log "new tcp from 24567" to acknowledge the second

Output from strace shows that when the server reads from the first
connection, the underlying select(2) does not include the listener
socket in the read set (i.e. it will not be notified of new
connections).  It's only after the first connection is completed that
I see accept(2)/select(2) on the listener socket again.

If I modify the stackv4 example to write to each client before
reading, then both connections are accepted and acknowledged
immediately (good), the writes go through (good), but data from the
clients is never received (bad).

Originally I noticed this issue in a local build of mirage-www: with
unix/socket mode, the home page may fail to load if the browser uses
concurrent connections to fetch css/images/etc.  That did not happen a
few weeks ago.

Any advice?


MirageOS-devel mailing list



Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.