Доброго времени суток Уважаемые! Вот написал код демона который висит и периодически лезет в бд mysql за информацией, но после нескольких часов, бывает дней появляется ошибка mysql server going away(точно непомню). Код рабочий, но с этой проблемой немогу справиться, почитав форумы узнал о InactiveDestroy, прописав ее проблема не исчезла, может быть вы натолкнете на ошибку? часть проблеммного кода:
| Код | while ($sock->recv($newmsg, $MAXLEN)) { my($port, $ipaddr) = sockaddr_in($sock->peername); my $call= IO::Socket::INET->new(PeerAddr => inet_ntoa($ipaddr), PeerPort => $PORTNO, Proto=> 'udp' ) or die "socket: $@"; my $hishost = inet_ntoa($ipaddr); my $addr_bill = inet_aton_bill($hishost); if ($newmsg eq "deposit") { my ($sth, $balans); $db->{ InactiveDestroy } = 1; $sth = $db->prepare("SELECT * FROM users WHERE addr='$addr_bill'"); $sth->execute(); $balans = $sth->fetchrow_hashref(); my $new = $db->prepare("select * from news ORDER BY time DESC LIMIT 1"); $new->execute(); my $news = $new->fetchrow_hashref(); my $ppp = $db->prepare("SELECT * FROM sessions WHERE id_user=$balans->{'id'}"); $ppp->execute(); my $sess = $ppp->fetchrow_hashref(); my ($ss, $mm, $hh, $dd, $mo, $y) = (localtime($news->{'time'}))[0,1,2,3,4,5]; my $year = $y+1901; my $format_win = "$dd.$mo.$year $hh:$mm:$ss"; my $data = $db->prepare("select sum(incoming), sum(outgoing) from data where id_user='$balans->{'id'}' and (log_time between '$sess->{'connected'}' and '".time()."')"); $data->execute(); my $traff = $data->fetchrow_hashref(); my $tarif = $db->prepare("select * FROM tariffs WHERE id=$balans->{'id_tariff'}"); $tarif->execute(); my $period = $tarif->fetchrow_hashref(); my $abonplata = $balans->{'last_period'} + $period->{'period'}; $call->send($balans->{'deposit'}."|".$currency."|".$traff->{'sum(incoming)'}."|".$traff->{'sum(outgoing)'}."|".$balans->{'p_in'}."|".$balans->{'p_out'}."|".$abonplata."|".$format_win."|".$news->{'text'}.""); } } $db->disconnect; die "recv: $!";
|
|