iob_send(3) send I/O batch


#include <iob.h>

int64 iob_send(int64 s,io_batch* b);


iob_send sends the (rest of) b over the socket s.

iob_send 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 error (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_send until it returns 0, -1 or -3.

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

The benefit of the I/O batch API is that it exploits platform specific APIs like FreeBSD's sendfile. The file contents will always be sent in a way that allows the operating systems to perform zero copy TCP, and the buffers will always be sent using as few syscalls as possible and avoiding unnecessary copying (using writev).