Replace spinning send_all() with a proper non-blocking send. When the socket write buffer limit is reached, we should stop trying to send and wait for the socket to become writable again. Non-blocking TCP sockets can return in two different ways when the write buffer limit is reached: 1. ret = -1 and errno = EAGAIN/EWOULDBLOCK. No data has been written. 2. ret < total_size. Short write, only part of the message was transmitted. Handle both cases and keep track of how many bytes have been written in s->send_index. (This includes the 'length' header before the actual payload buffer.) Signed-off-by: Stefan Hajnoczi <stefanha@linux.vnet.ibm.com> |
||
---|---|---|
.. | ||
checksum.c | ||
checksum.h | ||
dump.c | ||
dump.h | ||
hub.c | ||
hub.h | ||
Makefile.objs | ||
queue.c | ||
queue.h | ||
slirp.c | ||
slirp.h | ||
socket.c | ||
socket.h | ||
tap-aix.c | ||
tap-bsd.c | ||
tap-haiku.c | ||
tap-linux.c | ||
tap-linux.h | ||
tap-solaris.c | ||
tap-win32.c | ||
tap.c | ||
tap.h | ||
util.c | ||
util.h | ||
vde.c | ||
vde.h |