… | |
… | |
171 | use common::sense; |
171 | use common::sense; |
172 | |
172 | |
173 | use base 'Exporter'; |
173 | use base 'Exporter'; |
174 | |
174 | |
175 | BEGIN { |
175 | BEGIN { |
176 | our $VERSION = 4.76; |
176 | our $VERSION = 4.77; |
177 | |
177 | |
178 | our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close |
178 | our @AIO_REQ = qw(aio_sendfile aio_seek aio_read aio_write aio_open aio_close |
179 | aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
179 | aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_readdirx |
180 | aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl |
180 | aio_scandir aio_symlink aio_readlink aio_realpath aio_fcntl aio_ioctl |
181 | aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range |
181 | aio_sync aio_fsync aio_syncfs aio_fdatasync aio_sync_file_range |
… | |
… | |
192 | our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush |
192 | our @EXPORT_OK = qw(poll_fileno poll_cb poll_wait flush |
193 | min_parallel max_parallel max_idle idle_timeout |
193 | min_parallel max_parallel max_idle idle_timeout |
194 | nreqs nready npending nthreads |
194 | nreqs nready npending nthreads |
195 | max_poll_time max_poll_reqs |
195 | max_poll_time max_poll_reqs |
196 | sendfile fadvise madvise |
196 | sendfile fadvise madvise |
197 | mmap munmap mremap munlock munlockall); |
197 | mmap munmap mremap munlock munlockall |
|
|
198 | |
|
|
199 | accept4 tee splice pipe2 pipesize |
|
|
200 | fexecve memfd_create eventfd |
|
|
201 | timerfd_create timerfd_settime timerfd_gettime |
|
|
202 | pidfd_open pidfd_send_signal pidfd_getfd); |
198 | |
203 | |
199 | push @AIO_REQ, qw(aio_busy); # not exported |
204 | push @AIO_REQ, qw(aio_busy); # not exported |
200 | |
205 | |
201 | @IO::AIO::GRP::ISA = 'IO::AIO::REQ'; |
206 | @IO::AIO::GRP::ISA = 'IO::AIO::REQ'; |
202 | |
207 | |
… | |
… | |
285 | $nfd = IO::AIO::get_fdlimit |
290 | $nfd = IO::AIO::get_fdlimit |
286 | IO::AIO::min_fdlimit $nfd |
291 | IO::AIO::min_fdlimit $nfd |
287 | |
292 | |
288 | IO::AIO::sendfile $ofh, $ifh, $offset, $count |
293 | IO::AIO::sendfile $ofh, $ifh, $offset, $count |
289 | IO::AIO::fadvise $fh, $offset, $len, $advice |
294 | IO::AIO::fadvise $fh, $offset, $len, $advice |
|
|
295 | IO::AIO::fexecve $fh, $argv, $envp |
290 | |
296 | |
291 | IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] |
297 | IO::AIO::mmap $scalar, $length, $prot, $flags[, $fh[, $offset]] |
292 | IO::AIO::munmap $scalar |
298 | IO::AIO::munmap $scalar |
293 | IO::AIO::mremap $scalar, $new_length, $flags[, $new_address] |
299 | IO::AIO::mremap $scalar, $new_length, $flags[, $new_address] |
294 | IO::AIO::madvise $scalar, $offset, $length, $advice |
300 | IO::AIO::madvise $scalar, $offset, $length, $advice |
… | |
… | |
306 | |
312 | |
307 | # very much unportable syscalls |
313 | # very much unportable syscalls |
308 | IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_len, $flags |
314 | IO::AIO::accept4 $r_fh, $sockaddr, $sockaddr_len, $flags |
309 | IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
315 | IO::AIO::splice $r_fh, $r_off, $w_fh, $w_off, $length, $flags |
310 | IO::AIO::tee $r_fh, $w_fh, $length, $flags |
316 | IO::AIO::tee $r_fh, $w_fh, $length, $flags |
|
|
317 | |
311 | $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
318 | $actual_size = IO::AIO::pipesize $r_fh[, $new_size] |
312 | ($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
319 | ($rfh, $wfh) = IO::AIO::pipe2 [$flags] |
|
|
320 | |
|
|
321 | $fh = IO::AIO::eventfd [$initval, [$flags]] |
313 | $fh = IO::AIO::memfd_create $pathname[, $flags] |
322 | $fh = IO::AIO::memfd_create $pathname[, $flags] |
314 | $fh = IO::AIO::eventfd [$initval, [$flags]] |
323 | |
315 | $fh = IO::AIO::timerfd_create $clockid[, $flags] |
324 | $fh = IO::AIO::timerfd_create $clockid[, $flags] |
316 | ($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags, $new_interval, $nbw_value |
325 | ($cur_interval, $cur_value) = IO::AIO::timerfd_settime $fh, $flags, $new_interval, $nbw_value |
317 | ($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh |
326 | ($cur_interval, $cur_value) = IO::AIO::timerfd_gettime $fh |
|
|
327 | |
|
|
328 | $fh = IO::AIO::pidfd_open $pid[, $flags] |
|
|
329 | $status = IO::AIO::pidfd_send_signal $pidfh, $signal[, $siginfo[, $flags]] |
|
|
330 | $fh = IO::AIO::pidfd_getfd $pidfh, $targetfd[, $flags] |
318 | |
331 | |
319 | =head2 API NOTES |
332 | =head2 API NOTES |
320 | |
333 | |
321 | All the C<aio_*> calls are more or less thin wrappers around the syscall |
334 | All the C<aio_*> calls are more or less thin wrappers around the syscall |
322 | with the same name (sans C<aio_>). The arguments are similar or identical, |
335 | with the same name (sans C<aio_>). The arguments are similar or identical, |
… | |
… | |
2219 | some "Advanced I/O" function not available to in Perl, without going the |
2232 | some "Advanced I/O" function not available to in Perl, without going the |
2220 | "Asynchronous I/O" route. Many of these have an asynchronous C<aio_*> |
2233 | "Asynchronous I/O" route. Many of these have an asynchronous C<aio_*> |
2221 | counterpart. |
2234 | counterpart. |
2222 | |
2235 | |
2223 | =over 4 |
2236 | =over 4 |
|
|
2237 | |
|
|
2238 | =item $retval = IO::AIO::fexecve $fh, $argv, $envp |
|
|
2239 | |
|
|
2240 | A more-or-less direct equivalent to the POSIX C<fexecve> functions, which |
|
|
2241 | allows you to specify the program to be executed via a file descriptor (or |
|
|
2242 | handle). Returns C<-1> and sets errno to C<ENOSYS> if not available. |
2224 | |
2243 | |
2225 | =item $numfd = IO::AIO::get_fdlimit |
2244 | =item $numfd = IO::AIO::get_fdlimit |
2226 | |
2245 | |
2227 | Tries to find the current file descriptor limit and returns it, or |
2246 | Tries to find the current file descriptor limit and returns it, or |
2228 | C<undef> and sets C<$!> in case of an error. The limit is one larger than |
2247 | C<undef> and sets C<$!> in case of an error. The limit is one larger than |