Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
io_nonblock(3)		   Library Functions Manual		io_nonblock(3)

       io_nonblock - switch to non-blocking I/O

       #include	<io.h>

       void io_nonblock(int64 fd);

       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_try-
       write 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 al-
	  low any shorter interval.) Of	course,	this may still mean a  10-mil-
	  lisecond 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  con-

       io_wait(3), io_canwrite(3)



Want to link to this manual page? Use this URL:

home | help