задача: процесс-сервер должен общаться только с друмя клиентами
АЛГОРИТМ I:
1.
а) сервер слушает сокет
б) клиент подключается к серверу
2.
а)ждёт подключеня второго клиента, и когда он подключается сервер закрывает прослушиваемый сокет
3.
а) сервер пораждает процесс копию fork-ом, закрывает сокеты (2 сокета) для передачи данных у потомка, у родителя они остаются открытыми, и пораждает самого себя через функцию execl
4.
a) сервер отсылает данные двум клиентам
б) соответственно они получают их.
5. далее сервер с клиентами обрабатывают эти данные и обмениваются ими
АЛГОРИТМ II:
создается отдельный процесс, в задачу которого входит открыть дескриптор для прослушивания и установать его под определённым номером (к примеру номер 4) с помощью функции dup2(). и все процессы сервера будут слушать именно этот сокет, а далее тотже алгоритм, только закрытие прослушиваемого сокета происходит после порождения нового процесса:
1.
а) сервер слушает сокет
б) клиент подключается к серверу
2.
а)ждёт подключеня второго клиента
3.
а) сервер пораждает процесс копию fork-ом, закрывает сокеты (2 сокета) для передачи данных у потомка, у родителя они остаются открытыми, и пораждает самого себя через функцию execl
4.
а) затем сервер закрывает прослушиваемый сокет
5.
a) сервер отсылает данные двум клиентам
б) соответственно они получают их.
6. далее сервер с клиентами обрабатывают эти данные и обмениваются ими
вопрос:
почему при первом алгоритме не получается осуществить задачу «каждый процесс-сервер должен общаться только с друмя клиентами», а при втором — получается?
спасибо!
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
зачем так сложно ?
один процесс
все решается через listen/accept/select
классическая схема, приведена в info libc
задержками для двух клиентов можно пренебречь