Threads are surprisingly good and easily solve the C10K problem.
The problem then comes at other sources like how much files does your os let your user keep open(this is easy to bypass).
Again practically speaking C10K is no longer a modern world problem and I understand that epoll interfaces perform much better with much lesser resource usage.
dealing with stack size for each thread worker.
This was also easy since the workers for my thread needed pretty small stack but this didn't have much impact.
The number of concurrent socket(as a client) i can open is limited by the number of port range that my os restricts me on.
This can be configured using