NAME
IO::AsyncX::Sendfile - adds support for Sys::Sendfile to IO::Async::Stream
VERSION
version 0.002
SYNOPSIS
$stream
->sendfile(
file
=>
'somefile'
,
)->on_done(
sub
{
$stream
->
close
;
});
DESCRIPTION
NOTE: This is currently a proof-of-concept, the actual API may vary in later versions. Eventually this functionality will be incorporated into the generic async filehandling API, so this module is provided as a workaround in the interim.
Provides a "sendfile" method on IO::Async::Stream.
METHODS
Note that these methods are injected directly into IO::Async::Stream.
sendfile
Write the contents of the file directly to the socket without reading it into memory first (using the kernel's sendfile call if available).
Called with the following named parameters:
file - if defined, this will be used as the filename to open
fh - if defined, we'll use this as the filehandle
length - if defined, send this much data from the file (default is 'everything from current position to end')
Returns a Future which will be resolved with the number of bytes written when successful.
Example usage:
my
$listener
=
$loop
->
listen
(
addr
=> {
family
=>
'unix'
,
socktype
=>
'stream'
,
path
=>
'sendfile.sock'
,
},
on_stream
=>
sub
{
my
$stream
=
shift
;
$stream
->configure(
on_read
=>
sub
{
my
(
$self
,
$buffref
,
$eof
) =
@_
;
$$buffref
=
''
;
return
0;
},
);
if
(
'send one file'
) {
$stream
->sendfile(
file
=>
'test.dat'
,
)->on_done(
sub
{
warn
"File send complete: @_\n"
;
$stream
->
close
;
});
}
else
{
$stream
->sendfile(
file
=>
'first.dat'
);
$stream
->sendfile(
file
=>
'second.dat'
);
$stream
->
write
(
'EOF'
,
on_flush
=>
sub
{
shift
->
close
});
}
$loop
->add(
$stream
);
}
);
If the sendfile call fails, the returned Future will fail with the string exception from $! as the failure reason, with sendfile => numeric $!, remaining bytes as the remaining details:
==> ->fail(
"Some generic I/O error"
,
"sendfile"
, EIO, 60000)
SEE ALSO
AUTHOR
Tom Molesworth <cpan@perlsite.co.uk>
LICENSE
Copyright Tom Molesworth 2013-2015. Licensed under the same terms as Perl itself.