On 1/26/12, Dmitry Karasik <[email protected]> wrote:
> context handle_connection(...);
> tail {
> ... закончился readable/writable или ошибка ...
> again unless $socket-> is_closed;
> }
> ( более полно в lib/IO/Lambda/HTTP.pm )
Догадывался, что так. Но тогда получается никакого смысла в этом нет,
только усложнение кода. Можно писать этот же код без дополнительных
абстракций, линейнее и менее разбросаннее:
tcp_server undef, 55555, sub {
my ($fh) = @_;
my ($w, $t, $buf, $handle_connection, $end);
$handle_connection = sub {
# readable
$t = AE::timer 5, 0, $end;
$w = AE::io $fh, 0, sub {
my $len = sysread $fh, $buf, ...;
# writable
$t = AE::timer 5, 0, $end;
$w = AE::io $fh, 1, sub {
my $len = syswrite $fh, $buf, ...;
# keepalive
&$handle_connection();
};
};
};
$end = sub {
undef $t;
undef $w;
...
};
};
А раз нету никаких ветвлений, то можно и просто подряд функции писать,
как в примере раньше.
--
Moscow.pm mailing list
[email protected] | http://moscow.pm.org