Я должен указать, что я не спрашиваю о конкретных деталях реализации (пока), а просто общий обзор того, что происходит. Я понимаю основную концепцию сокета и нуждаюсь в разъяснении процесса в целом. Мое (возможно, очень неправильное) понимание в настоящее время таково:
Сокет постоянно прослушивает клиентов, которые хотят подключиться (в своем потоке). Когда происходит соединение, возникает событие, которое порождает другой поток для выполнения процесса соединения. Во время процесса подключения клиенту присваивается собственный сокет, в котором для связи с сервером. Затем сервер ожидает данных от клиента и при получении данных происходит событие, которое порождает поток для чтения данных из потока в буфер.
Мои вопросы:
Как вышло мое понимание?
Требуется ли каждому клиентскому сокету собственный поток для прослушивания данных?
Как перенаправляются данные в правильный клиентский сокет? Это чему-то позаботятся кишки TCP/UDP/kernel?
В этой многопоточной среде какие данные обычно используются совместно, и в чем суть споров?
Любые разъяснения и дополнительное объяснение будут очень признательны.
EDIT:
Что касается вопроса о том, какие данные обычно используются совместно, а также о точках споров, я понимаю, что это больше детализация реализации, чем вопрос об общем процессе приема соединений и отправки/получения данных. Я просмотрел несколько реализаций (SuperSocket и Kayak) и заметил некоторую синхронизацию для таких вещей, как кеш сеанса и многоразовые буферные пулы. Не стесняйтесь игнорировать этот вопрос. Я оценил все ваши отзывы.