.TH io_tryread 3 .SH NAME io_tryread \- read from a descriptor without blocking .SH SYNTAX .B #include 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)