… | |
… | |
116 | |
116 | |
117 | return if $self->{transport}; |
117 | return if $self->{transport}; |
118 | |
118 | |
119 | Scalar::Util::weaken $self; |
119 | Scalar::Util::weaken $self; |
120 | |
120 | |
121 | my $monitor = $AnyEvent::MP::Config::CFG{monitor_timeout} || $AnyEvent::MP::Kernel::MONITOR_TIMEOUT; |
121 | my $monitor = $AnyEvent::MP::Kernel::CONFIG->{monitor_timeout}; |
122 | |
122 | |
123 | $self->{connect_to} ||= AE::timer $monitor, 0, sub { |
123 | $self->{connect_to} ||= AE::timer $monitor, 0, sub { |
124 | $self->transport_error (transport_error => $self->{id}, "unable to connect"); |
124 | $self->transport_error (transport_error => $self->{id}, "unable to connect"); |
125 | }; |
125 | }; |
126 | |
126 | |
127 | return unless @addresses; |
127 | return unless @addresses; |
128 | return if $self->{connect_w}; |
128 | return if $self->{connect_w}; |
129 | |
129 | |
130 | $AnyEvent::MP::Kernel::WARN->(9, "connecting to $self->{id} with [@addresses]"); |
130 | $AnyEvent::MP::Kernel::WARN->(9, "connecting to $self->{id} with [@addresses]"); |
131 | |
131 | |
132 | my $interval = $AnyEvent::MP::Config::CFG{connect_interval} || $AnyEvent::MP::Kernel::CONNECT_INTERVAL; |
132 | my $interval = $AnyEvent::MP::Kernel::CONFIG->{connect_interval}; |
133 | |
133 | |
134 | $interval = ($monitor - $interval) / @addresses |
134 | $interval = ($monitor - $interval) / @addresses |
135 | if ($monitor - $interval) / @addresses < $interval; |
135 | if ($monitor - $interval) / @addresses < $interval; |
136 | |
136 | |
137 | $interval = 0.4 if $interval < 0.4; |
137 | $interval = 0.4 if $interval < 0.4; |
138 | |
138 | |
139 | my @endpoints; |
139 | my @endpoints; |
140 | |
140 | |
141 | $self->{connect_w} = AE::timer rand, $interval, sub { |
141 | $self->{connect_w} = AE::timer 0.050 * rand, $interval * (0.9 + 0.1 * rand), sub { |
142 | @endpoints = @addresses |
142 | @endpoints = @addresses |
143 | unless @endpoints; |
143 | unless @endpoints; |
144 | |
144 | |
145 | my $endpoint = shift @endpoints; |
145 | my $endpoint = shift @endpoints; |
146 | |
146 | |
… | |
… | |
224 | delete $AnyEvent::MP::Kernel::PORT{$port}; |
224 | delete $AnyEvent::MP::Kernel::PORT{$port}; |
225 | delete $AnyEvent::MP::Kernel::PORT_DATA{$port}; |
225 | delete $AnyEvent::MP::Kernel::PORT_DATA{$port}; |
226 | |
226 | |
227 | my $mon = delete $AnyEvent::MP::Kernel::LMON{$port} |
227 | my $mon = delete $AnyEvent::MP::Kernel::LMON{$port} |
228 | or !@reason |
228 | or !@reason |
229 | or $AnyEvent::MP::Kernel::WARN->(2, "unmonitored local port $port died with reason: @reason"); |
229 | or $AnyEvent::MP::Kernel::WARN->(8, "unmonitored local port $port died with reason: @reason"); |
230 | |
230 | |
231 | $_->(@reason) for values %$mon; |
231 | $_->(@reason) for values %$mon; |
232 | } |
232 | } |
233 | |
233 | |
234 | sub monitor { |
234 | sub monitor { |