Futher refinement of Q9/A9.

This commit is contained in:
Michael Kerrisk 2008-02-28 15:54:33 +00:00
parent 4e698277c0
commit cb1de8d77d
1 changed files with 11 additions and 7 deletions

View File

@ -385,11 +385,18 @@ Receiving an event from
.BR epoll_wait (2) .BR epoll_wait (2)
should suggest to you that such should suggest to you that such
file descriptor is ready for the requested I/O operation. file descriptor is ready for the requested I/O operation.
You have simply to consider it ready until you receive the next You must consider it ready until the next (non-blocking)
read/write yields
.BR EAGAIN . .BR EAGAIN .
When and how you will use the file descriptor is entirely up to you. When and how you will use the file descriptor is entirely up to you.
.sp .sp
For stream oriented files (e.g., pipe, FIFO, stream socket), the For packet/token-oriented files (e.g., datagram socket,
terminal in canonical mode),
the only way to detect the end of the read/write I/O space.
is to continue to read/write until
.BR EAGAIN .
.sp
For stream-oriented files (e.g., pipe, FIFO, stream socket), the
condition that the read/write I/O space is exhausted can also be detected by condition that the read/write I/O space is exhausted can also be detected by
checking the amount of data read from / written to the target file checking the amount of data read from / written to the target file
descriptor. descriptor.
@ -402,11 +409,8 @@ can be sure of having exhausted the read I/O space for the file
descriptor. descriptor.
The same is true when writing using The same is true when writing using
.BR write (2). .BR write (2).
.sp (Avoid this latter technique if you cannot guarantee that
For packet/token oriented files (e.g., datagram socket, the monitored file descriptor always refers to a stream-oriented file.)
terminal in canonical mode), you need to continue to read/write until
.BR EAGAIN ,
in order to detect the end of the read/write I/O space.
.SS Possible Pitfalls and Ways to Avoid Them .SS Possible Pitfalls and Ways to Avoid Them
.TP .TP
.B o Starvation (edge-triggered) .B o Starvation (edge-triggered)