iho4s显示无法连接服务器怎么办,perl - 不使用TLS时localhost的AnyEvent tcp服务器-客户端示例挂起 - 堆栈内存溢出...

在Windows上调试针对AnyEvent的失败测试时,我基于测试80_ssltest.t创建了以下脚本:

use feature qw(say);

use strict;

use warnings;

use AnyEvent::Socket;

use AnyEvent::Handle;

use AnyEvent::TLS;

my $ctx = AnyEvent::TLS->new( cert_file => $0 );

my $server_done = AnyEvent->condvar;

my $client_done = AnyEvent->condvar;

my $server_port = AnyEvent->condvar;

my $host = "127.0.0.1";

my $server = tcp_server(

$host,

undef, # service: must be either a service name or a numeric port number

# (or 0 or undef, in which case an ephemeral port will be used).

#

sub { # This is the accept callback..

my ($fh, $host, $port) = @_;

say "server_accept";

my $hd; $hd = AnyEvent::Handle->new(

#tls => "accept",

#tls_ctx => $ctx,

fh => $fh,

timeout => 8,

on_error => sub {

say "server_error ";

$server_done->send; undef $hd;

},

on_eof => sub {

say "server_eof";

$server_done->send; undef $hd;

}

);

$hd->push_read (

line => sub {

say "server got line ";

}

);

}, # end of accept callback..

sub { # This is the prepare callback

say "server_listen";

$server_port->send ($_[2]);

}

);

my $port = $server_port->recv; # At this point the server should be listening...

my $hd; $hd = AnyEvent::Handle->new(

connect => [$host, $port],

#tls => "connect",

#tls_ctx => $ctx,

timeout => 8,

on_connect => sub {

say "client_connect";

},

on_error => sub {

say "client_error ";

$client_done->send; undef $hd;

},

on_eof => sub {

say "client_eof";

$client_done->send; undef $hd;

}

);

$hd->push_write ("1\n");

say "Sleeping..";

sleep 1;

$hd->on_drain (sub {

say "client_drain";

$client_done->send;

undef $hd; # For some reason this does not send EOF to the server

});

say "Waiting for client done..";

$client_done->recv;

say "Waiting for server done..";

$server_done->recv;

__END__

-----BEGIN RSA PRIVATE KEY-----

MIIEpAIBAAKCAQEA02VwAqlQzCrPenkxUjawHcXzJreJ9LDhX7Bkg3E/RB6Ilm4D

LBeilCmzkY7avp57+WCiVw2qkg+kH4Ef2sd+r10UCGPh/1diLehRAzp3Ho1bixyg

w+zkDm79OnN3uHxuKigkAxx3GGz9HhQA83U+RUns+39/OnFh0RY6/f5rV2ziA9jD

6HK3Mnsuxocd46YbVdiqlQK430CgiGj8dV44JG6+R6x3r5qXDbbRtGubC29kQOUq

kYslbpTo7ml8ShyqAP6qa8BpeSIaNG1CQQ/7JkAdxSWyFHqMQ0HR3BUiaEfUElZt

DFgXcCkKB5F8jx+wYoLzlPHHZaUvfP2nueYjcwIDAQABAoIBAQCtRDMuu0ByV5R/

Od5nGFP500mcrkrwuBnBqH56DdRhLPWe9sS62xRyhEuePoykOJo8qCvnVlg8J33K

JLfLRkBb09qbleKiuyjJn+Tm1IDWFd62gtxyOjQicG41/nZeS/6vpv79XdNvvcUp

ZhPxeGN1v0XyTWomqNAX5DSuAl5Q5HxkaRYNeuLZaPYkqmEVTgYqNSes/wRLKUb6

MaVrZ9AA/oHJMmmV4evf06s7l7ICjxAWeas7CI6UGkEz8ZFoVRJsLk5xtTsnZLgf

f24/pqHz1vApPs7CsJhK2HsLZcxMPD+hmTNI/Njl51WoH8zGhkv+p88vDzybpNSF

Hpkl+ZlBAoGBAOyfjVLD0OznJKSFksoCZKS4dlPHgXUb47Qb/XchIySQ/DNO6ff9

AA6r6doDFp51A8N1GRtGQN4LKujFPOdZ5ah7zbc2PfuOJGHku0Oby+ydgHJ19eW4

s3CIM20TuzLndFPrEGFgOrt+i5qKisti2OOZhjsDwfd48vsBm9U20lUpAoGBAOS1

Chm+vA7JevPzl+acbDSiyELaNRAXZ73CX4NIxJURjsgDeOurnBtLQEQyagZbNHcx

W4pc59Ql5KDLzu/Sne8oC3pxhaWeIPhc2d3cd/8UyGtQLtN2QnilwkjHgi3x1JGb

RPRsgAV6nwn10qUrze1XLkHsTCRI4QYD/k0uXcs7AoGBAMStJaFag2i2Ax4ArG7e

KFtFu4yNckwtv0kwTrBbScOWAxp+iDiJASgwunJsSLuylUs8JH8oGLi23ZaWgrXl

Yd918BpNqp1Rm2oG3aQndguZKm95Hscvi26Itv39/YYlHeq2omndu1OmrlDowM6m

vZIIRKr+x5Vz4brCro09QPxpAoGARJAdghBTEl/Gc2HgdOsJ6VGvlZMS+0r498NQ

nOvwuvuzgTTBSG1+9BPAJXGzpUosVVs/pSArA8eEXcwbsnvCixLHNiLYPQlFuw8i

5UcV1iul1b4I+63lSYPv1Z+x4BIydqBEsL3iN0JGcVb3mjqilndfT7YGMY6DnykN

UJgI2EcCgYAMfZHnD06XFM8ny+NsFILItpGqjCmAhkEPGwl1Zhy5Hx16CFDPDwGt

CmIbxNSLsDyiiK+i5tuSUFhV2Bw/iT539979INTIdNL1ughfhATR8MVNiOKCvZBa

uoEeE19szmG7Mj2eV2IDH0e8iaikjRFcfN89s39tNn1AjBNmEccUJA==

-----END RSA PRIVATE KEY-----

-----

-----BEGIN CERTIFICATE-----

MIIDHTCCAgWgAwIBAgIJAPASTbY2HCx0MA0GCSqGSIb3DQEBBQUAMBMxETAPBgNV

BAMTCEFueUV2ZW50MB4XDTEyMDQwNTA1NTk1MFoXDTM3MDQwNTA1NTk1MFowEzER

MA8GA1UEAxMIQW55RXZlbnQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB

AQDTZXACqVDMKs96eTFSNrAdxfMmt4n0sOFfsGSDcT9EHoiWbgMsF6KUKbORjtq+

nnv5YKJXDaqSD6QfgR/ax36vXRQIY+H/V2It6FEDOncejVuLHKDD7OQObv06c3e4

fG4qKCQDHHcYbP0eFADzdT5FSez7f386cWHRFjr9/mtXbOID2MPocrcyey7Ghx3j

phtV2KqVArjfQKCIaPx1Xjgkbr5HrHevmpcNttG0a5sLb2RA5SqRiyVulOjuaXxK

HKoA/qprwGl5Iho0bUJBD/smQB3FJbIUeoxDQdHcFSJoR9QSVm0MWBdwKQoHkXyP

H7BigvOU8cdlpS98/ae55iNzAgMBAAGjdDByMB0GA1UdDgQWBBTHphJ9Il0PtIWD

DI9aueToXo9DYzBDBgNVHSMEPDA6gBTHphJ9Il0PtIWDDI9aueToXo9DY6EXpBUw

EzERMA8GA1UEAxMIQW55RXZlbnSCCQDwEk22NhwsdDAMBgNVHRMEBTADAQH/MA0G

CSqGSIb3DQEBBQUAA4IBAQA/vY+qg2xjNeOuDySW/VOsStEwcaiAm/t24z3TYoZG

2ZzyKuvFXolhXsalCahNPcyUxZqDAekODPRaq+geFaZrOn41cq/LABTKv5Theukv

H7IruIFARBo1pTPFCKMnDqESBdHvV1xTOcKGxGH5I9iMgiUrd/NnlAaloT/cCNFI

OwhEPsF9kBsZwJBGWrjjVttU2lzMzizS7vaSIWLBuEDObWbSXiU+IdG+nODOe2Dv

W7PL43yd4fz4HQvN4IaZrtwkd7XiKodRR1gWjLjW/3y5kuXL+DA/jkTjrRgiH8K7

lVjm7gvkULRV2POQqtc2DUVXLubQmmGSjmQmxSwFX65t

-----END CERTIFICATE-----

该脚本挂起(Ubuntu 20.04,perl版本5.30),但是如果我使用TLS握手(用tls和tls_ctx取消注释代码行),则可以正常工作。

没有TLS的输出是:

server_listen

Sleeping..

Waiting for client done..

client_drain

server_accept

Waiting for server done..

server got line <1>

server_error

带有TLS的输出(取消注释以tls和tls_ctx开头的4行tls_ctx )是:

server_listen

Sleeping..

Waiting for client done..

client_connect

server_accept

client_drain

Waiting for server done..

server got line <1>

server_eof

请注意,当不使用TLS时,不会调用on_connect (输出中缺少client_connect ),

即使不使用TLS时未连接客户端,服务器也会接收数据并打印server got line <1> 。这很奇怪。

知道不使用TLS时会有什么问题吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值