bionic (3) io_nonblock.3.gz

Provided by: libowfat-dev_0.30-2ubuntu1_amd64 bug

NAME

       io_nonblock - switch to non-blocking I/O

SYNTAX

       #include <io.h>

       void io_nonblock(int64 fd);

DESCRIPTION

       io_nonblock  puts UNIX descriptor fd into ``non-blocking mode.'' Calling io_nonblock(fd) before io_fd(fd)
       makes io_tryread and io_trywrite faster and more efficient.

       Actually, current UNIX kernels do not support non-blocking descriptors; they  support  non-blocking  open
       files.  Furthermore,  many  programs  will break if they encounter non-blocking mode. This means that you
       must not use io_nonblock for a descriptor inherited from another program.

       io_nonblock has no return value; it always succeeds. If d  is  not  the  number  of  a  UNIX  descriptor,
       io_nonblock has no effect.

       If  io_fd  is  given  a  descriptor in blocking mode, io_tryread and io_trywrite go through the following
       contortions to avoid blocking:

       1  Stop if poll says that the descriptor is not ready.  Otherwise  there's  a  good  chance,  but  not  a
          guarantee:  even  if  poll  says  the  descriptor is ready, the descriptor might not be ready a moment
          later. (Furthermore, poll can fail on some systems.)

       2  Catch SIGALRM. SIGALRM must not be blocked, and must not be used elsewhere in the program.

       3  Set an interval timer so that any blocking call will be interrupted by SIGALRM within 10 milliseconds.
          (Current  UNIX  kernels  do  not  allow  any  shorter  interval.)  Of  course,  this  may still mean a
          10-millisecond delay.

       If io_fd is given a descriptor in non-blocking mode (or a descriptor for a regular disk file), io_tryread
       and io_trywrite avoid these contortions.

SEE ALSO

       io_wait(3), io_canwrite(3)

                                                                                                  io_nonblock(3)