我正在使用 Net::Server 模块构建一个预分叉 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(\$@)";
}
##
# 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;
}