ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
(Generate patch)

Comparing IO-AIO/AIO.pm (file contents):
Revision 1.183 by root, Sun Sep 12 03:40:05 2010 UTC vs.
Revision 1.186 by root, Thu Dec 30 07:19:31 2010 UTC

168use common::sense; 168use common::sense;
169 169
170use base 'Exporter'; 170use base 'Exporter';
171 171
172BEGIN { 172BEGIN {
173 our $VERSION = '3.65'; 173 our $VERSION = '3.71';
174 174
175 our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close 175 our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close
176 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx 176 aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx
177 aio_scandir aio_symlink aio_readlink aio_sync aio_fsync 177 aio_scandir aio_symlink aio_readlink aio_sync aio_fsync
178 aio_fdatasync aio_sync_file_range aio_pathsync aio_readahead 178 aio_fdatasync aio_sync_file_range aio_pathsync aio_readahead
265 IO::AIO::nready 265 IO::AIO::nready
266 IO::AIO::npending 266 IO::AIO::npending
267 267
268 IO::AIO::sendfile $ofh, $ifh, $offset, $count 268 IO::AIO::sendfile $ofh, $ifh, $offset, $count
269 IO::AIO::fadvise $fh, $offset, $len, $advice 269 IO::AIO::fadvise $fh, $offset, $len, $advice
270 IO::AIO::madvise $scalar, $offset, $length, $advice
271 IO::AIO::mprotect $scalar, $offset, $length, $protect
270 IO::AIO::munlock $scalar, $offset = 0, $length = undef 272 IO::AIO::munlock $scalar, $offset = 0, $length = undef
271 IO::AIO::munlockall 273 IO::AIO::munlockall
272 274
273=head2 AIO REQUEST FUNCTIONS 275=head2 AIO REQUEST FUNCTIONS
274 276
426reading at byte offset C<$in_offset>, and starts writing at the current 428reading at byte offset C<$in_offset>, and starts writing at the current
427file offset of C<$out_fh>. Because of that, it is not safe to issue more 429file offset of C<$out_fh>. Because of that, it is not safe to issue more
428than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each 430than one C<aio_sendfile> per C<$out_fh>, as they will interfere with each
429other. 431other.
430 432
433Please note that C<aio_sendfile> can read more bytes from C<$in_fh> than
434are written, and there is no way to find out how many bytes have been read
435from C<aio_sendfile> alone, as C<aio_sendfile> only provides the number of
436bytes written to C<$out_fh>. Only if the result value equals C<$length>
437one can assume that C<$length> bytes have been read.
438
439Unlike with other C<aio_> functions, it makes a lot of sense to use
440C<aio_sendfile> on non-blocking sockets, as long as one end (typically
441the C<$in_fh>) is a file - the file I/O will then be asynchronous, while
442the socket I/O will be non-blocking. Note, however, that you can run into
443a trap where C<aio_sendfile> reads some data with readahead, then fails
444to write all data, and when the socket is ready the next time, the data
445in the cache is already lost, forcing C<aio_sendfile> to again hit the
446disk. Explicit C<aio_read> + C<aio_write> let's you control resource usage
447much better.
448
431This call tries to make use of a native C<sendfile> syscall to provide 449This call tries to make use of a native C<sendfile> syscall to provide
432zero-copy operation. For this to work, C<$out_fh> should refer to a 450zero-copy operation. For this to work, C<$out_fh> should refer to a
433socket, and C<$in_fh> should refer to an mmap'able file. 451socket, and C<$in_fh> should refer to an mmap'able file.
434 452
435If a native sendfile cannot be found or it fails with C<ENOSYS>, 453If a native sendfile cannot be found or it fails with C<ENOSYS>,
436C<ENOTSUP>, C<EOPNOTSUPP>, C<EAFNOSUPPORT>, C<EPROTOTYPE> or C<ENOTSOCK>, 454C<ENOTSUP>, C<EOPNOTSUPP>, C<EAFNOSUPPORT>, C<EPROTOTYPE> or C<ENOTSOCK>,
437it will be emulated, so you can call C<aio_sendfile> on any type of 455it will be emulated, so you can call C<aio_sendfile> on any type of
438filehandle regardless of the limitations of the operating system. 456filehandle regardless of the limitations of the operating system.
439
440Please note, however, that C<aio_sendfile> can read more bytes from
441C<$in_fh> than are written, and there is no way to find out how many
442bytes have been read from C<aio_sendfile> alone, as C<aio_sendfile> only
443provides the number of bytes written to C<$out_fh>. Only if the result
444value equals C<$length> one can assume that C<$length> bytes have been
445read.
446 457
447 458
448=item aio_readahead $fh,$offset,$length, $callback->($retval) 459=item aio_readahead $fh,$offset,$length, $callback->($retval)
449 460
450C<aio_readahead> populates the page cache with data from a file so that 461C<aio_readahead> populates the page cache with data from a file so that
1580 1591
1581Returns the number of bytes copied, or C<-1> on error. 1592Returns the number of bytes copied, or C<-1> on error.
1582 1593
1583=item IO::AIO::fadvise $fh, $offset, $len, $advice 1594=item IO::AIO::fadvise $fh, $offset, $len, $advice
1584 1595
1585Simply calls the C<posix_fadvise> function (see it's 1596Simply calls the C<posix_fadvise> function (see its
1586manpage for details). The following advice constants are 1597manpage for details). The following advice constants are
1587avaiable: C<IO::AIO::FADV_NORMAL>, C<IO::AIO::FADV_SEQUENTIAL>, 1598avaiable: C<IO::AIO::FADV_NORMAL>, C<IO::AIO::FADV_SEQUENTIAL>,
1588C<IO::AIO::FADV_RANDOM>, C<IO::AIO::FADV_NOREUSE>, 1599C<IO::AIO::FADV_RANDOM>, C<IO::AIO::FADV_NOREUSE>,
1589C<IO::AIO::FADV_WILLNEED>, C<IO::AIO::FADV_DONTNEED>. 1600C<IO::AIO::FADV_WILLNEED>, C<IO::AIO::FADV_DONTNEED>.
1590 1601
1591On systems that do not implement C<posix_fadvise>, this function returns 1602On systems that do not implement C<posix_fadvise>, this function returns
1592ENOSYS, otherwise the return value of C<posix_fadvise>. 1603ENOSYS, otherwise the return value of C<posix_fadvise>.
1604
1605=item IO::AIO::madvise $scalar, $offset, $len, $advice
1606
1607Simply calls the C<posix_madvise> function (see its
1608manpage for details). The following advice constants are
1609avaiable: C<IO::AIO::MADV_NORMAL>, C<IO::AIO::MADV_SEQUENTIAL>,
1610C<IO::AIO::MADV_RANDOM>, C<IO::AIO::MADV_WILLNEED>, C<IO::AIO::MADV_DONTNEED>.
1611
1612On systems that do not implement C<posix_madvise>, this function returns
1613ENOSYS, otherwise the return value of C<posix_madvise>.
1614
1615=item IO::AIO::mprotect $scalar, $offset, $len, $protect
1616
1617Simply calls the C<mprotect> function on the preferably AIO::mmap'ed
1618$scalar (see its manpage for details). The following protect
1619constants are avaiable: C<IO::AIO::PROT_NONE>, C<IO::AIO::PROT_READ>,
1620C<IO::AIO::PROT_WRITE>, C<IO::AIO::PROT_EXEC>.
1621
1622On systems that do not implement C<mprotect>, this function returns
1623ENOSYS, otherwise the return value of C<mprotect>.
1593 1624
1594=item IO::AIO::mmap $scalar, $length, $prot, $flags, $fh[, $offset] 1625=item IO::AIO::mmap $scalar, $length, $prot, $flags, $fh[, $offset]
1595 1626
1596Memory-maps a file (or anonymous memory range) and attaches it to the 1627Memory-maps a file (or anonymous memory range) and attaches it to the
1597given C<$scalar>, which will act like a string scalar. 1628given C<$scalar>, which will act like a string scalar.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines