roozu
Интересующийся
Сообщений: 1
|
|
« : 28 Март, 2013, 14:43:35 » |
|
Нужно сделать программу, которая будет посылать прокси на удаленные узлы через заданные промежутки времени. Пробовал реализовать это с подошью виртуальных прокси и таймеров, но не работает,подскажите я где-то допустил ошибку или таймеры с виртуальными прокси не работают.
Код сервера: #include <sys/proxy.h> #include <signal.h> #include <time.h> #include <sys/kernel.h> #include <unistd.h> #include <assert.h> #include <iostream>
int main() { //создается прокси int proxy = qnx_proxy_attach(0, NULL, 0, -1); cout << "local proxy: " << proxy << endl; //создается виртуальный прокси на третьем узле int vproxy = qnx_proxy_rem_attach(3, proxy); cout << "global proxy: " << vproxy << endl; assert(vproxy != -1); while(1) { //получаем сообщение pid_t cli_pid = Receive(0, NULL, 0); cout << "get msg form: " << cli_pid << endl; } return 0; }
код клиента: #include <sys/proxy.h> #include <signal.h> #include <time.h> #include <sys/kernel.h> #include <sys/types.h> #include <unistd.h> #include <assert.h> #include <iostream>
int main() { int vproxy; cout << "enter vproxy: "; //вводим идентификатор виртуального прокси cin >> vproxy; cout << endl; //отправляем прокси через триггер (всегда доходит) Trigger(vproxy); //создаем таймер, который срабатывает каждую секунду timer_t id, i; struct itimerspec timer; struct sigevent event; event.sigev_signo = -vproxy; id = timer_create(CLOCK_REALTIME, &event); assert(id != -1); timer.it_value.tv_sec = 1L; timer.it_value.tv_nsec = 0L; timer.it_interval.tv_sec = 1L; timer.it_interval.tv_nsec = 0L; //запускаем таймер int err_stat = timer_settime(id, 0, &timer, NULL); assert(err_stat != -1); sleep(60); return 0; }
Если и сервер и клиент запускаются на одном узле, все работает как надо, если же на разных, то прокси отправляется только по вызову функции Trigger(). Неужели таймер отправляет прокси не через триггер, а каким-то другим способом?
|