|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Опрос неименованых каналов |
|
C/C++ - Опрос неименованых каналов
|
Пользователь Сообщения: 78 |
Всем добрый день!
Вопрос есть, подскажите)! Тот же Linux, тот же чистый С. Есть один родительский процесс, порождающий N-ное количество дочерних. Неизвестно заранее сколько. 100-10000 примерно. Использую fork(). Хочу, чтобы при создании процесса формировалось pipe, через который будет производиться обмен с дочерним. Соответственно, сколько будет pipe тоже заранее неизвестно. Как грамотно организовать опрос всей совокупности pipe, на предмет получения сообщения от дочернего процесса? Требуется некоторым образом производить read их всех, по очереди, в бесконечном цикле. В данном случае данные будут только извлекаться, и ретранслироваться дальше, тут я ожидаю, что данная процедура (ретрансляция) не будет отнимать много времени. |
|
Отправлено: 21:48, 28-11-2015 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать Смысл тут прост. Я хочу чтобы в головном процессе был открытый на прием-передачу UDP-порт, на который будут посылать сообщения удаленные устройства. Каждое устройство имеет свой идент, по которому можно однозначно его идентифицировать, и открыть дочерний процесс для этого идента. Все это я уже сделал. Все бы хорошо, но после создания процесса общение с устройством переходит на дочерний процесс, с новым номером исходящего порта.
Вот я и надумал, сделать сепаратор между "шлюзовым" UDP-портом, и всеми дочерними потоками и их pipe. Содержимое bind-структур я буду кодировать внутри сообщений отправляемых по pipe, при извлечении данных от "дочки" сепаратор будет декодировать сообщение на само сообщение и sendto-структуру, это не особенно сложно. Но вот как организовать опрос всех открытых pipe? Особенно учитывая, что их количество будет динамически меняться (дочерние процессы имеют свойство закрываться по таймауту если нет обмена). Т.е по сути - тут попытка более-менее полной имитации TCP на UDP, по крайней мере в плане аналогии с многопотоковыми ТСР приложениями типа APACHE. |
Отправлено: 21:59, 28-11-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 740
|
Профиль | Отправить PM | Цитировать Цитата evpu:
Цитата evpu:
Цитата evpu:
![]() |
|||
Отправлено: 09:46, 02-12-2015 | #3 |
Пользователь Сообщения: 78
|
Профиль | Отправить PM | Цитировать >>Вы не UDT реализуете
Не, самодельный алгоритм... Не это. Напоминает TFTP >>процессы (а не потоки) Да, Вы правы - потоки. Получаются через fork(). По началу заимею что-то типа i5, потом можно будет и Xeon поставить. |
Последний раз редактировалось evpu, 12-12-2015 в 15:02. Отправлено: 14:35, 12-12-2015 | #4 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Прочее - Объединение DSL каналов | sergey12989 | Сетевые технологии | 6 | 14-04-2013 23:51 | |
Прочее - Резервирование каналов | skeletor | Общий по Linux | 4 | 18-09-2010 16:46 | |
Опрос о контенте | witchy | Хочу все знать | 3 | 03-08-2010 18:13 | |
Разделение каналов | Surround | Видео и аудио: обработка и кодирование | 1 | 26-07-2007 17:00 | |
Ширина каналов | Muskat | Сетевые технологии | 1 | 03-12-2003 05:18 |
|