Пример:
В главном (родительском) потоке должно быть:
#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 администраторов). Я уже сломал себе голову. Помогите, пожалуйста!
