… | |
… | |
74 | |
74 | |
75 | sub mp_connect { |
75 | sub mp_connect { |
76 | my $release = pop; |
76 | my $release = pop; |
77 | my ($host, $port, @args) = @_; |
77 | my ($host, $port, @args) = @_; |
78 | |
78 | |
79 | my $state; |
|
|
80 | |
|
|
81 | $state = AnyEvent::Socket::tcp_connect $host, $port, my$x=sub { |
|
|
82 | my ($fh, $nhost, $nport) = @_; |
|
|
83 | |
|
|
84 | return $release->() unless $fh; |
|
|
85 | |
|
|
86 | $state = new AnyEvent::MP::Transport |
79 | new AnyEvent::MP::Transport |
87 | fh => $fh, |
80 | connect => [$host, $port], |
88 | peername => $host, |
|
|
89 | peerhost => $nhost, |
|
|
90 | peerport => $nport, |
|
|
91 | release => $release, |
81 | release => $release, |
92 | @args, |
82 | @args, |
93 | ; |
|
|
94 | }; |
83 | ; |
95 | |
|
|
96 | \$state |
|
|
97 | } |
84 | } |
98 | |
85 | |
99 | =item new AnyEvent::MP::Transport |
86 | =item new AnyEvent::MP::Transport |
100 | |
87 | |
101 | # immediately starts negotiation |
88 | # immediately starts negotiation |
… | |
… | |
151 | verify_require_client_cert => 1, |
138 | verify_require_client_cert => 1, |
152 | }; |
139 | }; |
153 | } |
140 | } |
154 | |
141 | |
155 | $self->{hdl} = new AnyEvent::Handle |
142 | $self->{hdl} = new AnyEvent::Handle |
156 | fh => delete $self->{fh}, |
143 | ($self->{fh} ? (fh => $self->{fh}) : (connect => $self->{connect})), |
157 | autocork => 1, |
144 | autocork => 1, |
158 | no_delay => 1, |
145 | no_delay => 1, |
159 | keepalive => 1, |
146 | keepalive => 1, |
160 | on_error => sub { |
147 | on_error => sub { |
161 | $self->error ($_[2]); |
148 | $self->error ($_[2]); |
162 | }, |
149 | }, |
|
|
150 | on_connect => sub { |
|
|
151 | $self->{peerhost} = $_[1]; |
|
|
152 | $self->{peerport} = $_[2]; |
|
|
153 | $self->{peeraddr} = AnyEvent::Socket::format_hostport $_[1], $_[2]; |
|
|
154 | }, |
163 | rtimeout => $timeout, |
155 | rtimeout => $timeout, |
164 | peername => delete $self->{peername}, |
|
|
165 | ; |
156 | ; |
166 | |
157 | |
167 | my $greeting_kv = $self->{greeting} ||= {}; |
158 | my $greeting_kv = $self->{greeting} ||= {}; |
168 | |
159 | |
169 | $self->{local_node} ||= $AnyEvent::MP::Kernel::NODE; |
160 | $self->{local_node} ||= $AnyEvent::MP::Kernel::NODE; |