Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

announcing AnyEvent 4.0

3 views
Skip to first unread message

Marc Lehmann

unread,
May 24, 2008, 2:28:04 PM5/24/08
to perl...@perl.org, el...@x-paste.de, el...@plan9.de
I am pleased to announce AnyEvent 4.0

Why the major version bump?

Lots of functionality has been added (and thus some bugs are expected),
although the event core is still compatible to earlier versions and AnyEvent
is still pure-perl without any (hard) dependencies on any XS modules.

So whats new?

Apart from a number of bugfixes, the AnyEvent::Socket module has been
added. It contains a lot of utility functions to handle IPv4 and IPv6
addresses and tcp connections in a 100% non-blocking way. It supports SRV
record lookups.

To make the 100% non-blocking a reality, AnyEvent::Socket uses
AnyEvent::DNS, a fully asynchronous stub resolver capable of making tens
of thousands of DNS requests/second, with TCP and EDNS0 support.

And if you have Net::SSLeay installed, then AnyEvent::Handle can
transparently manage TLS/SSL connections, too.

On the microshit windows side, AnyEvent now tries very hard to avoid
the freeze in the testsuite on broken perls (with reduced functionality,
but resolver and socket code works fine there, too).

The distro should hit the CPAN mirrors in a few hours. Documentation
can be found via its homepage, http://software.schmorp.de/pkg/AnyEvent

Example:

This (pseudo-) code snippet connects to jabber server, by querying any SRV records
that might exist and connecting to the resulting addresses in turn -
regardless of wether the server uses ip version 4 or ip version 6 (or
both):

AnyEvent::Socket::tcp_connect "jabber.ietf.org", "xmpp-client",
sub {
my ($fh) = @_
or die "connect: $!";

my $handle;
$handle = new AnyEvent::Handle
fh => $fh,
on_eof => sub {
undef $handle; # destroy handle on eof
},
;

# etc..
# when server and client handshake a SSL connection, one can simply
# call $handle->starttls ("connect") to start ssl negotiation.

# push some writes or soem reads here, or set some callbacks
};

This (non-pseudo-code) code snippet asynchronously connects to
https://www.google.de and makes a simple GET request:

use AnyEvent::Impl::Perl; # use portable perl event loop
use AnyEvent::Handle;
use AnyEvent::Socket;

my $cv = AnyEvent->condvar;

AnyEvent::Socket::tcp_connect "www.google.de", 443,
sub {
my ($fh) = @_
or die "connect: $!";

my $handle; # avoid direct assignment so on_eof has it in scope.
$handle = new AnyEvent::Handle
fh => $fh,
tls => "connect", # start client-side tls negotiation
on_eof => sub {
undef $handle; # keep it alive till eof
warn "done.\n";
$cv->send;
};

$handle->push_write ("GET / HTTP/1.0\015\012\015\012");

$handle->push_read_line ("\015\012\015\012", sub {
my ($handle, $line) = @_;

# print response header
print "HEADER\n$line\n\nBODY\n";

$handle->on_read (sub {
# print response body
print $_[0]->rbuf;
$_[0]->rbuf = "";
});
});
};

$cv->recv;


--
The choice of a Deliantra, the free code+content MORPG
-----==- _GNU_ http://www.deliantra.net
----==-- _ generation
---==---(_)__ __ ____ __ Marc Lehmann
--==---/ / _ \/ // /\ \/ / p...@goof.com
-=====/_/_//_/\_,_/ /_/\_\

0 new messages