Hello,
I have a few questions...
On a busy server, sometimes a connection to a server aborts before the accept returns.
An example is:
client calls connect, server gets SYN, sends back SYN,ack, connect returns in the client, the connection is ESTABLISHED, then some time passes, the client sends RST, and *then* the server calls accept. At this point the accept returns ECONNABORTED (well, it depends on the unix distro, actually).
Does iolib internally catch this and restart the accept, is there a signaled condition? what does it do?
Also, related, how does iolib, or the underlying implementation's accept, deal with EINTR in the various calls? Especially with a nonblocking connect, which usually requires a trip through select() in order to deal with the socket?
And, finally, is there any stable interface to the abstracted multiplexer so I can do nonblocking i/o between multiple clients? If not, the only solution left to me is threading, and I'm not sure how sbcl scales to ten thousand+ threads. Instead of the callback method, is there a "give a pile of read/write/except sockets to a fake select which implements the select semantic with real select/pool/kqueue"? Additionally, is there any means to do nonblocking i/o on *standard-input* or *standard-output*?
Thank you.
-pete