2012-07-06 93 views
0

我正在使用Net :: Server模块构建一个preforking SSL服务器。 客户端将传输二进制数据,为每个数据集打开一个新的连接或让连接持续打开。Net ::服务器SSL服务器提示需要

数据是动态长度的,头部指定了净荷长度。

问题:

  • 什么是读取数据的推荐方式,也支持持久连接?
  • 在实际开始接收数据之前,我如何确定SSL会话是否由客户端正确建立?

代码模板:

#!/usr/bin/perl 

use common::sense; 

use IO::Socket; 
use base qw(Net::Server::PreForkSimple); 

my $sslErrorCallback = 'ssl_error_callback'; 
__PACKAGE__->run(
    port => "*:12345:ssleay:IPv4", 
    SSL_key_file => "server.pem", 
    SSL_cert_file => "server.crt", 
    SSL_error_callback => \&$sslErrorCallback, 
); 
exit; 

################################################################################ 

sub ssl_error_callback { 
    print STDERR "SSL failed; Data::Dumper:Dumper(\[email protected])"; 
} 

## 
# process_request - for Net::Server 
sub process_request { 
    my $self = shift; 
    my $serverProp = $self->{'server'}; 

    # howto check if ssl session is established? 

    while(1) { 
    # wait until new data is available 
    # read/verify the header (5 byte) 
    # read/verify the payload (XX byte) 
    # do something with the payload 
    }; 

    return; 
} 

回答

0
  1. 覆盖read检查关闭的连接。
  2. 重写bind_SSL进行额外Net :: SSLeay检查。