Net::Server モジュールを使用して preforking 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;
}