The aio_waitcomplete system call waits for completion of an asynchronous I/O request. Upon completion, aio_waitcomplete returns the result of the function and sets iocbp to point to the structure associated with the original request. If an asynchronous I/O request is completed before aio_waitcomplete is called, it returns immediately with the completed request.
If timeout is a non-NULL pointer, it specifies a maximum interval to wait for a asynchronous I/O request to complete. If timeout is a NULL pointer, aio_waitcomplete waits indefinitely. To effect a poll, the timeout argument should be non-NULL, pointing to a zero-valued timeval structure.
The aio_waitcomplete system call also serves the function of aio_return, thus aio_return should not be called for the control block returned in iocbp.
If an asynchronous I/O request has completed, iocbp is set to point to the control block passed with the original request, and the status is returned as described in read(2), write(2), or fsync(2). On failure, aio_waitcomplete returns -1, sets iocbp to NULL and sets errno to indicate the error condition.
The aio_waitcomplete system call fails if: