--- AnyEvent/lib/AnyEvent/Handle.pm 2008/06/15 21:44:56 1.69 +++ AnyEvent/lib/AnyEvent/Handle.pm 2008/07/18 02:14:44 1.75 @@ -16,7 +16,7 @@ =cut -our $VERSION = 4.151; +our $VERSION = 4.22; =head1 SYNOPSIS @@ -77,7 +77,7 @@ =item on_eof => $cb->($handle) -Set the callback to be called when an end-of-file condition is detcted, +Set the callback to be called when an end-of-file condition is detected, i.e. in the case of a socket, when the other side has closed the connection cleanly. @@ -164,6 +164,30 @@ amount of data without a callback ever being called as long as the line isn't finished). +=item autocork => + +When disabled (the default), then C will try to immediately +write the data to the handle if possible. This avoids having to register +a write watcher and wait for the next event loop iteration, but can be +inefficient if you write multiple small chunks (this disadvantage is +usually avoided by your kernel's nagle algorithm, see C). + +When enabled, then writes will always be queued till the next event loop +iteration. This is efficient when you do many small writes per iteration, +but less efficient when you do a single write only. + +=item no_delay => + +When doing small writes on sockets, your operating system kernel might +wait a bit for more data before actually sending it out. This is called +the Nagle algorithm, and usually it is beneficial. + +In some situations you want as low a delay as possible, which cna be +accomplishd by setting this option to true. + +The default is your opertaing system's default behaviour, this option +explicitly enables or disables it, if possible. + =item read_size => The default read block size (the amount of bytes this module will try to read @@ -203,7 +227,7 @@ or C on it before you pass it to AnyEvent::Handle. -See the C method if you need to start TLs negotiation later. +See the C method if you need to start TLS negotiation later. =item tls_ctx => $ssl_ctx @@ -248,7 +272,8 @@ $self->{_activity} = AnyEvent->now; $self->_timeout; - $self->on_drain (delete $self->{on_drain}) if $self->{on_drain}; + $self->on_drain (delete $self->{on_drain}) if exists $self->{on_drain}; + $self->no_delay (delete $self->{no_delay}) if exists $self->{no_delay}; $self->start_read if $self->{on_read}; @@ -322,6 +347,29 @@ $_[0]{on_timeout} = $_[1]; } +=item $handle->autocork ($boolean) + +Enables or disables the current autocork behaviour (see C +constructor argument). + +=cut + +=item $handle->no_delay ($boolean) + +Enables or disables the C setting (see constructor argument of +the same name for details). + +=cut + +sub no_delay { + $_[0]{no_delay} = $_[1]; + + eval { + local $SIG{__DIE__}; + setsockopt $_[0]{fh}, &Socket::IPPROTO_TCP, &Socket::TCP_NODELAY, int $_[1]; + }; +} + ############################################################################# =item $handle->timeout ($seconds) @@ -444,7 +492,7 @@ }; # try to write data immediately - $cb->(); + $cb->() unless $self->{autocork}; # if still data left in wbuf, we need to poll $self->{_ww} = AnyEvent->io (fh => $self->{fh}, poll => "w", cb => $cb) @@ -1402,7 +1450,7 @@ =item * all constructor arguments become object members. At least initially, when you pass a C-argument to the constructor it -will end up in C<< $handle->{tls} >>. Those members might be changes or +will end up in C<< $handle->{tls} >>. Those members might be changed or mutated later on (for example C will hold the TLS connection object). =item * other object member names are prefixed with an C<_>.