0

我正在使用 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;
}
4

1 回答 1

0
  1. 覆盖read以检查关闭的连接。
  2. 覆盖bind_SSL以执行额外的 Net::SSLeay 检查。
于 2012-07-09T20:58:47.443 回答