Provided by: libowfat-dev_0.32-4_amd64 bug

NAME

       io_nonblock - switch to non-blocking I/O

SYNTAX

       #include <libowfat/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)