Hello,list,

I've wrote a simple package which do some socket query.The package is working 
well at most time,but when I use it with mysql DBH in my main script,it'll get 
the mysql connection drop.

Here is my fullhead.pm:
----

package fullhead;

use strict;
use warnings;
use IO::Socket qw(:DEFAULT :crlf);
use MIME::Base64 qw(decode_base64 encode_base64);
use Encode; 

require Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK);
@ISA = qw(Exporter);
@EXPORT = qw(fullhead);
@EXPORT_OK = ();

sub fullhead
{
    .... # some codes do the socket query using the query_ud() function below
}


sub query_ud
{
    my $host=shift;
    my $mbox_id=shift;
    my $ref=shift;
    my %msgid=%$ref;
    my $port=PORT;

    my $sock=IO::Socket::INET->new(PeerAddr => $host,
                                   PeerPort => $port,
                                   Proto    => 'tcp');

    my $child=fork();
    die "can't fork $!" unless defined $child;


    if ($child)
    {
        local $SIG{CHLD}=sub {return};
        foreach my $msgid (keys %msgid)
        {
            print $sock "_getmsgxxx $mbox_id $msgid",CRLF;
        }
        $sock->shutdown(1);
        sleep;
    }else
    {
        open (HDW,">/tmp/fullhead_more.tmp") or die "$!";
        while(<$sock>){
            local $/=CRLF;
            chomp;
            print HDW $_;
        }
        close HDW;
        exit 0;
    }

}

1;
----

Then I use it in the main script:
----
use strict;
use DBI;
use fullhead;

my $mysql_host="192.168.3.236";
my $mysql_db="xxxx";
my $mysql_user="xxx";
my $mysql_passwd="xxxxxx";
my $mysql_table_alarm="rcptalarm";

my 
$dbh=DBI->connect("dbi:mysql:$mysql_db:$mysql_host",$mysql_user,$mysql_passwd,
                           {PrintError => 1,RaiseError => 0});

my $query="select * from $mysql_table_alarm limit 10";
my $sth=$dbh->prepare($query);
$sth->execute;

fullhead("[EMAIL PROTECTED]");
$sth->execute;
----

When I run the main script,I'll get the errors:

DBD::mysql::st execute failed: MySQL server has gone away at test.pl line 19.


It seems that the fullhead() call from fullhead.pm has droped the mysql 
connection.

Why this happen?Any suggestion is welcome,thanks.



--
Jeff Pang
NetEase AntiSpam Team
http://corp.netease.com

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to