| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > Проблема с сокетами |
| Автор: kreez 18.11.2002, 10:51 |
| У меня в процессе разработки многозадачного сервера под Linux возникли проблемы... Может быть, вы сможете мне помочь... В общем, есть UDP сокет (или RAW - неважно, главное, что без установки соединения, то есть не TCP), который используется, допустим, 5-ю потоками одновременно. Все пять потоков запускаются во время запуска самого сервера и выполняются постоянно (пока сам сервер жив Пример: В главном (родительском) потоке должно быть: #include ....... .................... .................... .................... int main() { char buffer[1024]; struct sockaddr_in addr; int sd, addr_size, bytes_amount; sd = socket (PF_INET, SOCK_DGRAM, 0); addr.sin_family = AF_INET; addr.sin_port = htons (9999); addr.sin_addr.s_addr = INADDR_ANY; bind (sd, &addr, sizeof(addr)); // ЗДЕСЬ ДОЛЖНЫ СОЗДАВАТЬСЯ 5 ДОЧЕРНИХ ПОТОКОВ ДЛЯ ОБСЛУЖИВАНИЯ // ЗАПРОСОВ АДМИНИСТРАТОРОВ bzero (buffer, 1024); addr_size = 1024; bytes_amount = recvfrom (sd, buffer, 1024, 0, &addr, &addr_size); // ЗДЕСЬ ИДЕТ КОД ОБРАБОТКИ ПОСТУПИВШИХ ДАННЫХ ОТ ПОЛЬЗОВАТЕЛЕЙ СЕРВЕРА (ОБЫЧНЫХ ПОЛЬЗОВАТЕЛЕЙ) } В дочерней потоковой функции должен быть код, принимающий через сокет sd из главного потока пакеты только от фиксированного IP ((один IP - один админ - один поток) -- всего их пять). Как сделать так, чтобы recvfrom() в дочернем потоке принимала пакеты только от конкретного IP (жестко фиксированного), а не от всех? Вместе с тем, все пакеты должны быть обработаны, их нельзя просто игнорировать... Схема такая - пакет поступает на IP сервера, где в зависимости от IP отправителя он обрабатывается либо главным потоком (собственно сервером), либо одним из дочерних потоков (если IP отправителя совпадает с одним из прописанных IP администраторов). Я уже сломал себе голову. Помогите, пожалуйста! |
| Автор: suborg 19.11.2002, 04:12 |
| Я думаю, нужно сделать гораздо проще - повесить поток на сокет, который будет забирать всё приходящие пакеты, и разсортировывать по очередям, принадлежащим другим пяти потокам уже соответственно твоей задаче. Достаточно просто и эффективно. |
| Автор: Coocky 7.6.2007, 09:53 |
| 123 |
| Автор: threef 7.6.2007, 20:32 | ||||
А это тебе зачем ? Поменяй Аню на кого-нибудь, должо быть счастье |