Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用perl连接apple APN时出现的问题_Perl_Ssl_Apple Push Notifications - Fatal编程技术网

使用perl连接apple APN时出现的问题

使用perl连接apple APN时出现的问题,perl,ssl,apple-push-notifications,Perl,Ssl,Apple Push Notifications,我正在使用一个使用Net::SSLeay的库(Net::APNS::Persistent)。此库有助于与Apple APNS服务器通信。我发现,如果我发送了任何错误的数据,例如错误的令牌或格式不正确的有效负载,程序将在三次尝试后终止。并且它没有显示错误消息 根据我的调试,这个问题发生在SSLeay.pm的第1895行 $writed=write\u partial($ssl,$writed,$to\u write,$$data\u ref) 我试图捕捉是否有异常,但没有运气。如果出现网络问题或任

我正在使用一个使用Net::SSLeay的库(Net::APNS::Persistent)。此库有助于与Apple APNS服务器通信。我发现,如果我发送了任何错误的数据,例如错误的令牌或格式不正确的有效负载,程序将在三次尝试后终止。并且它没有显示错误消息

根据我的调试,这个问题发生在SSLeay.pm的第1895行

$writed=write\u partial($ssl,$writed,$to\u write,$$data\u ref)

我试图捕捉是否有异常,但没有运气。如果出现网络问题或任何类型的错误,我希望它会显示一条可以处理的错误消息/异常。但它只是在不说任何话的情况下终止了程序。有办法解决这个问题吗?我的代码如下:

package apnsClient;

use Net::APNS::Persistent;
use Data::Dumper;
use Test::Trap;

my $cfg;
my $apns;

sub load {
    my $class = shift;
    my $self = {
        _cfg => shift,
    };

    $cfg = $self->{_cfg};

    bless $self, $class;
    return $self;
}

sub connect {
    my ($sandbox, $cert, $key, $pass) = $cfg->getAPNSServer();

    print "[x] Cert $cert Key $key \n";

    $apns = Net::APNS::Persistent->new({
        sandbox => $sandbox,
        cert    => $cert,
        key     => $key,
    }) or die("[-] Unable to connect to APNS server");
}

sub push {
    my ($class,$token,$payload) = @_;

    print "[+] Sending push with token: $token and Data: \n ".Dumper($payload);

    $apns->queue_notification(
       $token,
       $payload
       );
    print "[+] Sending apns queue \n";
    $apns->send_queue;
    print "[+] Sent \n";
}

sub disconnect {
    $apns->disconnect;
}

1;

终于解决了这个问题。如果提供了无效令牌,Apple server将丢弃会话,并且当写入套接字失败时,write_partial函数将发送终止信号。为了防止脚本终止,我们需要使用

$SIG{'PIPE'} = 'IGNORE';