• S
    net: EAGAIN handling for net/socket.c TCP · 45a7f54a
    Stefan Hajnoczi 提交于
    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: NStefan Hajnoczi <stefanha@linux.vnet.ibm.com>
    45a7f54a
socket.c 21.0 KB