Есть несколько способов добиться этого, некоторые из которых:
- использовать
select
, чтобы в основном ждать группы файловых дескрипторов, пока один из них не будет готов для чтения или записи. - использование потоков, таких как
pthreads
, для передачи отдельных сеансов отдельным потокам внутри одного процесса. - использование
fork
для репликации процесса для обработки сеанса, так чторазветвленный процесс обрабатывает этот сеанс, и оригинал возвращается к ожиданию большего количества соединений.
Из них я предпочитаю среднее.Форкирование процесса иногда является дорогостоящей операцией, так как данные обычно должны копироваться, если какой-либо процесс пытается их изменить.
Опция select
означает, что ваш код должен управлять несколькими сеансами, что иногда можетзапутаться.
Благодаря многопоточности вы можете относительно легко отделить сеансы друг от друга, не неся при этом затрат на дублирование процессов.Конечно, у потоков есть свои подводные камни, если вы не будете осторожны, но я считаю, что это предпочтительный вариант, как только вы поймете потенциальные проблемные области.