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

FreeBSD Manual Pages

  
 
  

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

NAME
     iob_write - send I/O batch through callback

SYNTAX
     #include <libowfat/iob.h>

     typedef int64 (*io_write_callback)(int64 s,const void* buf,uint64 n);

     int64 iob_write(int64 s,io_batch* b,io_write_callback cb);

DESCRIPTION
     iob_write sends the (rest of) b through the callback cb, passing s as first
     argument.	cb is expected to behave like io_trywrite(2).

     This interface is intended to send an I/O batch through a filter, for exam-
     ple  to encrypt or compress it.  If you just want to send an I/O batch to a
     socket, use iob_send instead.

     iob_write returns the number of bytes written, 0  if  there  were	no  more
     bytes  to be written in the batch, -1 for EAGAIN, or -3 for a permanent er-
     ror (for example "connection reset by peer").

     The normal usage pattern is using io_wait to  know  when  a  descriptor  is
     writable, and then calling iob_write until it returns 0, -1 or -3.

     If iob_write returns 0, terminate the loop (everything was written OK).  If
     it returns -1, call io_wait again.  If it returned -3, signal an error.

     The callback is supposed to behave like write(2), i.e. return the number of
     bytes  written,  0  for  EOF, -1 for error (iob_write will return -3 then).
     Return -1 with errno==EAGAIN if using non-blocking I/O when we need to wait
     for the next write event.	iob_write will then return -1.

NOTE
     iob_write will continue to call your callback until it  returns  an  error.
     So  if  you are in a state machine, for example a web server using this for
     SSL support, make sure to write at most n bytes at a time	(e.g.  64k)  and
     the  next time you are called return -1.  Otherwise iob_write might not re-
     turn until the whole file is served.

SEE ALSO
     iob_send(3)

								    iob_write(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=libowfat_iob_write&sektion=3&manpath=FreeBSD+Ports+15.1.quarterly>

home | help