… | |
… | |
223 | IO::AIO::nreqs |
223 | IO::AIO::nreqs |
224 | IO::AIO::nready |
224 | IO::AIO::nready |
225 | IO::AIO::npending |
225 | IO::AIO::npending |
226 | IO::AIO::reinit |
226 | IO::AIO::reinit |
227 | |
227 | |
228 | $nfd = IO::AIO::get_fdlimit [EXPERIMENTAL] |
228 | $nfd = IO::AIO::get_fdlimit |
229 | IO::AIO::min_fdlimit $nfd [EXPERIMENTAL] |
229 | IO::AIO::min_fdlimit $nfd |
230 | |
230 | |
231 | IO::AIO::sendfile $ofh, $ifh, $offset, $count |
231 | IO::AIO::sendfile $ofh, $ifh, $offset, $count |
232 | IO::AIO::fadvise $fh, $offset, $len, $advice |
232 | IO::AIO::fadvise $fh, $offset, $len, $advice |
233 | |
233 | |
234 | IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] |
234 | IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] |
… | |
… | |
246 | $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec |
246 | $nanoseconds = IO::AIO::st_atimensec, IO::AIO::st_mtimensec, IO::AIO::st_ctimensec, IO::AIO::st_btimensec |
247 | $seconds = IO::AIO::st_btimesec |
247 | $seconds = IO::AIO::st_btimesec |
248 | ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec |
248 | ($atime, $mtime, $ctime, $btime, ...) = IO::AIO::st_xtimensec |
249 | |
249 | |
250 | # very much unportable syscalls |
250 | # very much unportable syscalls |
|
|
251 | IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_len, $flags |
251 | IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
252 | IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
252 | IO::AIO::tee $r_fh, $w_fh, $length, $flags |
253 | IO::AIO::tee $r_fh, $w_fh, $length, $flags |
253 | $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
254 | $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
254 | ($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
255 | ($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
255 | $fh = IO::AIO::memfd_create $pathname[, $flags] |
256 | $fh = IO::AIO::memfd_create $pathname[, $flags] |
… | |
… | |
909 | So in general, you should only use these calls for things that do |
910 | So in general, you should only use these calls for things that do |
910 | (filesystem) I/O, not for things that wait for other events |
911 | (filesystem) I/O, not for things that wait for other events |
911 | (network, other processes), although if you are careful and know |
912 | (network, other processes), although if you are careful and know |
912 | what you are doing, you still can. |
913 | what you are doing, you still can. |
913 | |
914 | |
914 | The following constants are available (missing ones are, as usual |
915 | The following constants are available and can be used for normal |
915 | 0): |
916 | "ioctl" and "fcntl" as well (missing ones are, as usual 0): |
916 | |
917 | |
917 | "F_DUPFD_CLOEXEC", |
918 | "F_DUPFD_CLOEXEC", |
918 | |
919 | |
919 | "F_OFD_GETLK", "F_OFD_SETLK", "F_OFD_GETLKW", |
920 | "F_OFD_GETLK", "F_OFD_SETLK", "F_OFD_GETLKW", |
920 | |
921 | |
921 | "FIFREEZE", "FITHAW", "FITRIM", "FICLONE", "FICLONERANGE", |
922 | "FIFREEZE", "FITHAW", "FITRIM", "FICLONE", "FICLONERANGE", |
922 | "FIDEDUPERANGE". |
923 | "FIDEDUPERANGE". |
|
|
924 | |
|
|
925 | "F_ADD_SEALS", "F_GET_SEALS", "F_SEAL_SEAL", "F_SEAL_SHRINK", |
|
|
926 | "F_SEAL_GROW" and "F_SEAL_WRITE". |
923 | |
927 | |
924 | "FS_IOC_GETFLAGS", "FS_IOC_SETFLAGS", "FS_IOC_GETVERSION", |
928 | "FS_IOC_GETFLAGS", "FS_IOC_SETFLAGS", "FS_IOC_GETVERSION", |
925 | "FS_IOC_SETVERSION", "FS_IOC_FIEMAP". |
929 | "FS_IOC_SETVERSION", "FS_IOC_FIEMAP". |
926 | |
930 | |
927 | "FS_IOC_FSGETXATTR", "FS_IOC_FSSETXATTR", |
931 | "FS_IOC_FSGETXATTR", "FS_IOC_FSSETXATTR", |
… | |
… | |
1243 | fails the request with "ENOENT", there is often no need for error |
1247 | fails the request with "ENOENT", there is often no need for error |
1244 | checking in the "aio_wd" callback, as future requests using the |
1248 | checking in the "aio_wd" callback, as future requests using the |
1245 | value will fail in the expected way. |
1249 | value will fail in the expected way. |
1246 | |
1250 | |
1247 | IO::AIO::CWD |
1251 | IO::AIO::CWD |
1248 | This is a compiletime constant (object) that represents the process |
1252 | This is a compile time constant (object) that represents the process |
1249 | current working directory. |
1253 | current working directory. |
1250 | |
1254 | |
1251 | Specifying this object as working directory object for a pathname is |
1255 | Specifying this object as working directory object for a pathname is |
1252 | as if the pathname would be specified directly, without a directory |
1256 | as if the pathname would be specified directly, without a directory |
1253 | object. For example, these calls are functionally identical: |
1257 | object. For example, these calls are functionally identical: |
… | |
… | |
1723 | some "Advanced I/O" function not available to in Perl, without going the |
1727 | some "Advanced I/O" function not available to in Perl, without going the |
1724 | "Asynchronous I/O" route. Many of these have an asynchronous "aio_*" |
1728 | "Asynchronous I/O" route. Many of these have an asynchronous "aio_*" |
1725 | counterpart. |
1729 | counterpart. |
1726 | |
1730 | |
1727 | $numfd = IO::AIO::get_fdlimit |
1731 | $numfd = IO::AIO::get_fdlimit |
1728 | This function is *EXPERIMENTAL* and subject to change. |
|
|
1729 | |
|
|
1730 | Tries to find the current file descriptor limit and returns it, or |
1732 | Tries to find the current file descriptor limit and returns it, or |
1731 | "undef" and sets $! in case of an error. The limit is one larger |
1733 | "undef" and sets $! in case of an error. The limit is one larger |
1732 | than the highest valid file descriptor number. |
1734 | than the highest valid file descriptor number. |
1733 | |
1735 | |
1734 | IO::AIO::min_fdlimit [$numfd] |
1736 | IO::AIO::min_fdlimit [$numfd] |
1735 | This function is *EXPERIMENTAL* and subject to change. |
|
|
1736 | |
|
|
1737 | Try to increase the current file descriptor limit(s) to at least |
1737 | Try to increase the current file descriptor limit(s) to at least |
1738 | $numfd by changing the soft or hard file descriptor resource limit. |
1738 | $numfd by changing the soft or hard file descriptor resource limit. |
1739 | If $numfd is missing, it will try to set a very high limit, although |
1739 | If $numfd is missing, it will try to set a very high limit, although |
1740 | this is not recommended when you know the actual minimum that you |
1740 | this is not recommended when you know the actual minimum that you |
1741 | require. |
1741 | require. |
… | |
… | |
1890 | Calls the "munlockall" function. |
1890 | Calls the "munlockall" function. |
1891 | |
1891 | |
1892 | On systems that do not implement "munlockall", this function returns |
1892 | On systems that do not implement "munlockall", this function returns |
1893 | ENOSYS, otherwise the return value of "munlockall". |
1893 | ENOSYS, otherwise the return value of "munlockall". |
1894 | |
1894 | |
|
|
1895 | $fh = IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_maxlen, $flags |
|
|
1896 | Uses the GNU/Linux accept4(2) syscall, if available, to accept a |
|
|
1897 | socket and return the new file handle on success, or sets $! and |
|
|
1898 | returns "undef" on error. |
|
|
1899 | |
|
|
1900 | The remote name of the new socket will be stored in $sockaddr, which |
|
|
1901 | will be extended to allow for at least $sockaddr_maxlen octets. If |
|
|
1902 | the socket name does not fit into $sockaddr_maxlen octets, this is |
|
|
1903 | signaled by returning a longer string in $sockaddr, which might or |
|
|
1904 | might not be truncated. |
|
|
1905 | |
|
|
1906 | To accept name-less sockets, use "undef" for $sockaddr and 0 for |
|
|
1907 | $sockaddr_maxlen. |
|
|
1908 | |
|
|
1909 | The main reasons to use this syscall rather than portable |
|
|
1910 | C«accept(2)> are that you can specify "SOCK_NONBLOCK" and/or |
|
|
1911 | "SOCK_CLOEXEC" flags and you can accept name-less sockets by |
|
|
1912 | specifying 0 for $sockaddr_maxlen, which is sadly not possible with |
|
|
1913 | perl's interface to "accept". |
|
|
1914 | |
1895 | IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
1915 | IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
1896 | Calls the GNU/Linux splice(2) syscall, if available. If $r_off or |
1916 | Calls the GNU/Linux splice(2) syscall, if available. If $r_off or |
1897 | $w_off are "undef", then "NULL" is passed for these, otherwise they |
1917 | $w_off are "undef", then "NULL" is passed for these, otherwise they |
1898 | should be the file offset. |
1918 | should be the file offset. |
1899 | |
1919 | |
… | |
… | |
2137 | I am not sure anything can be done about this, so this is considered a |
2157 | I am not sure anything can be done about this, so this is considered a |
2138 | known issue, rather than a bug. |
2158 | known issue, rather than a bug. |
2139 | |
2159 | |
2140 | SEE ALSO |
2160 | SEE ALSO |
2141 | AnyEvent::AIO for easy integration into event loops, Coro::AIO for a |
2161 | AnyEvent::AIO for easy integration into event loops, Coro::AIO for a |
2142 | more natural syntax. |
2162 | more natural syntax and IO::FDPass for file descriptor passing. |
2143 | |
2163 | |
2144 | AUTHOR |
2164 | AUTHOR |
2145 | Marc Lehmann <schmorp@schmorp.de> |
2165 | Marc Lehmann <schmorp@schmorp.de> |
2146 | http://home.schmorp.de/ |
2166 | http://home.schmorp.de/ |
2147 | |
2167 | |