![]() |
Опрос неименованых каналов
Всем добрый день!
Вопрос есть, подскажите)! Тот же Linux, тот же чистый С. Есть один родительский процесс, порождающий N-ное количество дочерних. Неизвестно заранее сколько. 100-10000 примерно. Использую fork(). Хочу, чтобы при создании процесса формировалось pipe, через который будет производиться обмен с дочерним. Соответственно, сколько будет pipe тоже заранее неизвестно. Как грамотно организовать опрос всей совокупности pipe, на предмет получения сообщения от дочернего процесса? Требуется некоторым образом производить read их всех, по очереди, в бесконечном цикле. В данном случае данные будут только извлекаться, и ретранслироваться дальше, тут я ожидаю, что данная процедура (ретрансляция) не будет отнимать много времени. |
Смысл тут прост. Я хочу чтобы в головном процессе был открытый на прием-передачу UDP-порт, на который будут посылать сообщения удаленные устройства. Каждое устройство имеет свой идент, по которому можно однозначно его идентифицировать, и открыть дочерний процесс для этого идента. Все это я уже сделал. Все бы хорошо, но после создания процесса общение с устройством переходит на дочерний процесс, с новым номером исходящего порта.
Вот я и надумал, сделать сепаратор между "шлюзовым" UDP-портом, и всеми дочерними потоками и их pipe. Содержимое bind-структур я буду кодировать внутри сообщений отправляемых по pipe, при извлечении данных от "дочки" сепаратор будет декодировать сообщение на само сообщение и sendto-структуру, это не особенно сложно. Но вот как организовать опрос всех открытых pipe? Особенно учитывая, что их количество будет динамически меняться (дочерние процессы имеют свойство закрываться по таймауту если нет обмена). Т.е по сути - тут попытка более-менее полной имитации TCP на UDP, по крайней мере в плане аналогии с многопотоковыми ТСР приложениями типа APACHE. |
Цитата:
Цитата:
Цитата:
|
>>Вы не UDT реализуете
Не, самодельный алгоритм... Не это. Напоминает TFTP >>процессы (а не потоки) Да, Вы правы - потоки. Получаются через fork(). По началу заимею что-то типа i5, потом можно будет и Xeon поставить. |
Время: 10:59. |
Время: 10:59.
© OSzone.net 2001-