The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"WWW::Curl::Easy и многопоточность."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"WWW::Curl::Easy и многопоточность."  
Сообщение от mthawk email(ok) on 25-Апр-09, 23:34 
Здравствуйте!
Пишу на perl многопоточный демон, который управляет через COM несколькими устройствами и докладывает об этом по сети на удаленный сервер.
Использую по триду на устройство и трид, который держит связь через WWW::Curl::Easy.
Основная программа держит связь с тридами через Unix Socket, координирует их работу, формирует и передает данные для отправки в "сетевой" трид.
Проблема:
До тех пор, пока связь есть - все хорошо. Но когда возникают проблемы с сетью при неуспешной отправке сетевого запроса все падает с сообщением на консоль:
Usage: WWW::Curl::Easy::strerror(self, errornum) at /tmp/daemon line 18.
Могу только догадаться, что это реакция на строку:
print nowdate()." NET: Receiving data... Socket error occupied ".$XMLSOCK->strerror($retcode)." ($retcode).\n"
потому что line 18 - это usleep внутри while(1){...} основной программы, не трида.
Переменная, которая должна содержать код ошибки при отправке данных через WWW::Curl::Easy содержит вместо этого указатель на скаряр WWW::Curl::Easy=SCALAR(0xa958814)
Если WWW::Curl::Easy используется в основной программе, а не триде этой проблемы нет. Но это недопустимо для меня.

Кто может прояснить в чем проблема и с каким нюансом работы модулей и тридов я столкнулся.
Заранее благодарю!

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "WWW::Curl::Easy и многопоточность."  
Сообщение от NuINu (??) on 27-Апр-09, 17:40 
>[оверквотинг удален]
>потому что line 18 - это usleep внутри while(1){...} основной программы, не
>трида.
>Переменная, которая должна содержать код ошибки при отправке данных через WWW::Curl::Easy содержит
>вместо этого указатель на скаряр WWW::Curl::Easy=SCALAR(0xa958814)
>Если WWW::Curl::Easy используется в основной программе, а не триде этой проблемы нет.
>Но это недопустимо для меня.
>
>Кто может прояснить в чем проблема и с каким нюансом работы модулей
>и тридов я столкнулся.
>Заранее благодарю!

попробуйте проверять defined $XMLSOCK перед вызовом метода.
скорее всего его уже нет. потому и ругается.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "WWW::Curl::Easy и многопоточность."  
Сообщение от mthawk (ok) on 27-Апр-09, 18:04 
>попробуйте проверять defined $XMLSOCK перед вызовом метода.
>скорее всего его уже нет. потому и ругается.

Спасибо за проявленное внимание!
$XMLSOCK объявлена и имеет значение (WWW::Curl::Easy=SCALAR(0xa958814) ) - указатель на скаляр.
Судя по форме значения складывается ощущение, что скрипт теряет импортированное из модуля WWW::Curl::Easy пространство имен функций и переменных.
Проблема актуальна!

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "WWW::Curl::Easy и многопоточность."  
Сообщение от NuINu (??) on 28-Апр-09, 09:53 
>>попробуйте проверять defined $XMLSOCK перед вызовом метода.
>>скорее всего его уже нет. потому и ругается.
>
>Спасибо за проявленное внимание!
>$XMLSOCK объявлена и имеет значение (WWW::Curl::Easy=SCALAR(0xa958814) ) - указатель на скаляр.
>Судя по форме значения складывается ощущение, что скрипт теряет импортированное из модуля
>WWW::Curl::Easy пространство имен функций и переменных.
>Проблема актуальна!

не думаю что так.
переменная $XMLSOCK должна выглядеть как объект
Dump curl:
$VAR1 = bless( do{\(my $o = 135701648)}, 'WWW::Curl::Easy' );
вы же методу передаете скаляр. естественно функция которая вызывается видит это и ругается:
Usage: WWW::Curl::Easy::strerror(self, errornum)

значит либо кто то переопределил эту перемнную $XMLSOCK либо в не правильно передаете значение объекта в трид.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Спонсоры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру