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