The C10k solutions are effectively the same as for C500k, those being epoll (Linux), kqueue (BSD), etc. Our Java NIO server utilizes epoll to handle C500k.
What Java NIO server utilizes for EINTR? ^_^
The approaches stayed pretty much the same:
1. Serve many clients with each thread
2. Serve one client with each server thread
3. Build the server code into the kernel
It's really #1. #2 will barely get you to 10K and definitely not to 500K, while #3 is too brittle (although if you're feeling lazy, I noticed that Solaris has SSL and HTTP reverse proxies in the kernel).