You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
43 lines
1.7 KiB
Groff
43 lines
1.7 KiB
Groff
.TH io_tryread 3
|
|
.SH NAME
|
|
io_tryread \- read from a descriptor without blocking
|
|
.SH SYNTAX
|
|
.B #include <libowfat/io.h>
|
|
|
|
int \fBio_tryread\fP(int64 fd,char* buf,int64 len);
|
|
.SH DESCRIPTION
|
|
io_tryread tries to read \fIlen\fR bytes of data from descriptor
|
|
\fIfd\fR into buf[0], buf[1], ..., buf[len-1]. (The effects are
|
|
undefined if \fIlen\fR is 0 or smaller.) There are several possible
|
|
results:
|
|
|
|
.RS 0
|
|
.IP \[bu] 3
|
|
o_tryread returns an integer between 1 and \fIlen\fR: This number of bytes was
|
|
available for immediate reading; the bytes were read into the beginning
|
|
of \fIbuf\fR. Note that this number can be, and often is, smaller than \fIlen\fR;
|
|
you must not assume that io_tryread always succeeds in reading exactly
|
|
\fIlen\fR bytes.
|
|
.IP \[bu]
|
|
io_tryread returns 0: No bytes were read, because the descriptor is at
|
|
end of file. For example, this descriptor has reached the end of a disk
|
|
file, or is reading an empty pipe that has been closed by all writers.
|
|
.IP \[bu]
|
|
io_tryread returns -1, setting \fIerrno\fR to EAGAIN: No bytes were read,
|
|
because the descriptor is not ready. For example, the descriptor is
|
|
reading an empty pipe that could still be written to.
|
|
.IP \[bu]
|
|
io_tryread returns -3, setting \fIerrno\fR to something other than
|
|
EAGAIN: No bytes were read, because the read attempt encountered a
|
|
persistent error, such as a serious disk failure (EIO), an unreachable
|
|
network (ENETUNREACH), or an invalid descriptor number (EBADF).
|
|
.RE
|
|
|
|
io_tryread does not pause waiting for a descriptor that is not ready.
|
|
If you want to pause, use io_waitread or io_wait.
|
|
|
|
You can make io_tryread faster and more efficient by making
|
|
the socket non-blocking with io_nonblock().
|
|
.SH "SEE ALSO"
|
|
io_nonblock(3), io_waitread(3), io_tryreadtimeout(3)
|