… | |
… | |
2010 | Net::SSLeay::CTX_set_mode ($tls, 1|2); |
2010 | Net::SSLeay::CTX_set_mode ($tls, 1|2); |
2011 | |
2011 | |
2012 | $self->{_rbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ()); |
2012 | $self->{_rbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ()); |
2013 | $self->{_wbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ()); |
2013 | $self->{_wbio} = Net::SSLeay::BIO_new (Net::SSLeay::BIO_s_mem ()); |
2014 | |
2014 | |
2015 | Net::SSLeay::BIO_write ($self->{_rbio}, delete $self->{rbuf}); |
2015 | Net::SSLeay::BIO_write ($self->{_rbio}, $self->{rbuf}); |
|
|
2016 | $self->{rbuf} = ""; |
2016 | |
2017 | |
2017 | Net::SSLeay::set_bio ($tls, $self->{_rbio}, $self->{_wbio}); |
2018 | Net::SSLeay::set_bio ($tls, $self->{_rbio}, $self->{_wbio}); |
2018 | |
2019 | |
2019 | $self->{_on_starttls} = sub { $_[0]{on_starttls}(@_) } |
2020 | $self->{_on_starttls} = sub { $_[0]{on_starttls}(@_) } |
2020 | if $self->{on_starttls}; |
2021 | if $self->{on_starttls}; |
… | |
… | |
2305 | $handle->on_eof (undef); |
2306 | $handle->on_eof (undef); |
2306 | $handle->on_error (sub { |
2307 | $handle->on_error (sub { |
2307 | my $data = delete $_[0]{rbuf}; |
2308 | my $data = delete $_[0]{rbuf}; |
2308 | }); |
2309 | }); |
2309 | |
2310 | |
|
|
2311 | Note that this example removes the C<rbuf> member from the handle object, |
|
|
2312 | which is not normally allowed by the API. It is expressly permitted in |
|
|
2313 | this case only, as the handle object needs to be destroyed afterwards. |
|
|
2314 | |
2310 | The reason to use C<on_error> is that TCP connections, due to latencies |
2315 | The reason to use C<on_error> is that TCP connections, due to latencies |
2311 | and packets loss, might get closed quite violently with an error, when in |
2316 | and packets loss, might get closed quite violently with an error, when in |
2312 | fact all data has been received. |
2317 | fact all data has been received. |
2313 | |
2318 | |
2314 | It is usually better to use acknowledgements when transferring data, |
2319 | It is usually better to use acknowledgements when transferring data, |