QNX.ORG.RU

Разработка => Языки и алгоритмы => Тема начата: leha от Ноября 19, 2004, 08:20:30 am



Название: отвалился клиент и сервер блокирован
Отправлено: leha от Ноября 19, 2004, 08:20:30 am
вообщем есть несколько машин которые сливают данные на одно устройство. Устройство может работать одновременно только с одним. Ну написал я сервер пытающийся разрулить запросы к устройству. Стартует ждет запроса от клиента, получив запрос даю клиенту команду работай увеличиваю счетчик на единицу и всем остальным клиентам отлуп, клиент закончив передачу посылает серверу "привет" счетчик на единицу уменшил, остальные могут начать работу. Но машины переодически, сильно "умными" рабочими перезапускаються и клиент не щлет серверу ничего. В результате сервер не уменьшил счетчик и все остальные курят. как это можно разрулить?


Название: отвалился клиент и сервер блокирован
Отправлено: MikeP от Ноября 19, 2004, 08:58:07 am
в корне менять идею синхронизации


Название: отвалился клиент и сервер блокирован
Отправлено: leha от Ноября 19, 2004, 09:25:46 am
Возникла мысль по таймауту проверять жив клиент или нет, и принудительно сбрашивать флаг что устройство занято. Как узнать жив клиент или нет если пид его известен?


Название: отвалился клиент и сервер блокирован
Отправлено: darkelf от Ноября 19, 2004, 10:01:36 am

printf("client is %s
", (kill(pid_of_client, 0) == -1) ? "dead" : "alive" );


Название: отвалился клиент и сервер блокирован
Отправлено: leha от Ноября 19, 2004, 10:06:28 am
дык не хотелось бы его пытаться убивать пока он жив, тем более он на другой ноде.


Название: отвалился клиент и сервер блокирован
Отправлено: MikeP от Ноября 19, 2004, 10:21:41 am
а зачем серверу синхронизации самому проверять клиента?
прошел таймаут, если клиент за это время не откликнулся сам (типа keep-alive не прислал) - грохнуть его на всякий случай и сказать остальным, что все ок...


Название: отвалился клиент и сервер блокирован
Отправлено: darkelf от Ноября 19, 2004, 10:26:56 am
leha
дык не хотелось бы его пытаться убивать пока он жив

kill(pid, 0) проверяет существование процесса с указанным pid-ом, при этом никаких сигналов не посылается..
leha
,тем более он на другой ноде.
а по подробнее, uname -a?


Название: отвалился клиент и сервер блокирован
Отправлено: leha от Ноября 19, 2004, 11:01:06 am
qnx 4.25 просто сервер и клиенты на разных машинах. Хотя наверное раз виртуальный канал создаеться, то и пид будет соответсвовать процессу. Send ведь нормально отрабатываеться. Спасибо попробую так и реализовать.


Название: отвалился клиент и сервер блокирован
Отправлено: Evgeniy от Ноября 19, 2004, 06:07:49 pm
А не проще ли попробовать прикрутить для этих целей какой-нибудь спулер печати? Судя по исходной постановке ваш сервер работает именно как спулер...