Skip to content

Commit

Permalink
a few more small optimizations
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Jun 5, 2013
1 parent c2752ca commit 65e605a
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 34 deletions.
53 changes: 25 additions & 28 deletions lib/Mojo/IOLoop/Client.pm
Expand Up @@ -34,7 +34,7 @@ sub connect {

sub _cleanup {
my $self = shift;
return $self unless my $reactor = $self->{reactor};
return $self unless my $reactor = $self->reactor;
$self->{$_} && $reactor->remove(delete $self->{$_})
for qw(delay timer handle);
return $self;
Expand Down Expand Up @@ -97,34 +97,31 @@ sub _try {
# Disable Nagle's algorithm
setsockopt $handle, IPPROTO_TCP, TCP_NODELAY, 1;

# TLS
if ($args->{tls} && !$handle->isa('IO::Socket::SSL')) {
return $self->emit_safe(
error => 'IO::Socket::SSL 1.75 required for TLS support')
unless TLS;

# Upgrade
weaken $self;
my %options = (
SSL_ca_file => $args->{tls_ca}
&& -T $args->{tls_ca} ? $args->{tls_ca} : undef,
SSL_cert_file => $args->{tls_cert},
SSL_error_trap => sub { $self->_cleanup->emit_safe(error => $_[1]) },
SSL_hostname => $args->{address},
SSL_key_file => $args->{tls_key},
SSL_startHandshake => 0,
SSL_verify_mode => $args->{tls_ca} ? 0x01 : 0x00,
SSL_verifycn_name => $args->{address},
SSL_verifycn_scheme => $args->{tls_ca} ? 'http' : undef
);
my $reactor = $self->reactor;
$reactor->remove($handle);
return $self->emit_safe(error => 'TLS upgrade failed')
unless $handle = IO::Socket::SSL->start_SSL($handle, %options);
return $reactor->io($handle => sub { $self->_tls })->watch($handle, 0, 1);
}
return $self->_cleanup->emit_safe(connect => $handle)
if !$args->{tls} || $handle->isa('IO::Socket::SSL');
return $self->emit_safe(
error => 'IO::Socket::SSL 1.75 required for TLS support')
unless TLS;

$self->_cleanup->emit_safe(connect => $handle);
# Upgrade
weaken $self;
my %options = (
SSL_ca_file => $args->{tls_ca}
&& -T $args->{tls_ca} ? $args->{tls_ca} : undef,
SSL_cert_file => $args->{tls_cert},
SSL_error_trap => sub { $self->_cleanup->emit_safe(error => $_[1]) },
SSL_hostname => $args->{address},
SSL_key_file => $args->{tls_key},
SSL_startHandshake => 0,
SSL_verify_mode => $args->{tls_ca} ? 0x01 : 0x00,
SSL_verifycn_name => $args->{address},
SSL_verifycn_scheme => $args->{tls_ca} ? 'http' : undef
);
my $reactor = $self->reactor;
$reactor->remove($handle);
return $self->emit_safe(error => 'TLS upgrade failed')
unless $handle = IO::Socket::SSL->start_SSL($handle, %options);
$reactor->io($handle => sub { $self->_tls })->watch($handle, 0, 1);
}

1;
Expand Down
5 changes: 2 additions & 3 deletions lib/Mojo/IOLoop/Server.pm
Expand Up @@ -34,7 +34,7 @@ has reactor => sub {
sub DESTROY {
my $self = shift;
if (my $port = $self->{port}) { $ENV{MOJO_REUSE} =~ s/(?:^|\,)${port}:\d+// }
return unless my $reactor = $self->{reactor};
return unless my $reactor = $self->reactor;
$self->stop if $self->{handle};
$reactor->remove($_) for values %{$self->{handles}};
}
Expand Down Expand Up @@ -139,8 +139,7 @@ sub _tls {
# Accepted
if ($handle->accept_SSL) {
$self->reactor->remove($handle);
delete $self->{handles}{$handle};
return $self->emit_safe(accept => $handle);
return $self->emit_safe(accept => delete $self->{handles}{$handle});
}

# Switch between reading and writing
Expand Down
4 changes: 1 addition & 3 deletions lib/Mojo/IOLoop/Stream.pm
Expand Up @@ -16,11 +16,9 @@ sub new { shift->SUPER::new(handle => shift, buffer => '') }
sub close {
my $self = shift;

# Cleanup
return unless my $reactor = $self->{reactor};
return unless my $reactor = $self->reactor;
return unless my $handle = delete $self->timeout(0)->{handle};
$reactor->remove($handle);

close $handle;
$self->emit_safe('close');
}
Expand Down

0 comments on commit 65e605a

Please sign in to comment.