Кодим СОКЕТЫ в СИ (99 баллов)

Компьютеры программирование windows си сокеты

Друзья! очень давно хочу написать свой миним хттп сервер.

Но у меня изначально по теории с сокетами проблемка, в частности я не понимаю как организовывается подключение к одному сокету большого количества клиентов.

Вроде как сервер переносит общение с 80ого порта на другие свободные, так? но какой механизм действий?

Подскажите где почитать о программировании сокетов в си в контексте поключения множества клиентов к одному порту!
Ответы:
В Windows это делается путём запуска дополнительных цепочек (threads), которым передаётся дескриптор соединения. В Linux это делается путём создания копии процесса (fork).
Не изобретай велосипед. Просто изучи готовые коды, если есть желание. Но сразу предупреждаю - там чёрт ногу сломит.
Всё очень просто. Твоя программа должна подключиться к порту на прослушивание, в твоем случае к 80 порту. Как только из вне что-то постучится на етот порт, ты либо получишь сигнал, или просто продолжится выполнение кода после функции которая слушает 80 порт(если будешь писать на низком уровне без всяких библиотек, то 2-ой вариант). после етого тебе нужно обработать поступившый сигнал и отправить обратно данные, естественно в ето время новый сигнал на 80 порт будет проигнорирован, т.к. твоя программа будет занята обработкой. По этому каждый запрос нужно вынести в отдельный поток, чтобы твоя программа могла вернуться опять к прослушке 80-го порта. Делается ето или с помощью fork под NIX'ами или с использованием threads под виндой(да и под NIX'ами тоже можно с ними делать). В общем, после каждого поступившего запроса, ты просто перешь указатель на соединение(ну или копируешь процесс в случае с fork) и дальше обрабатываешь его в отдельном месте. Тем самым ограничение одновременных запросов будет зависить от используемой операционной системы - сколько она может создать потоков для обработки и сколько TCP соеденений она вообще может создать.


10 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.