connection: move remaining data and fds

If we can't send all of the data, move the remaining data to the
start of the buffer so that we can send it again later.

See #111
This commit is contained in:
Wim Taymans 2019-10-01 10:43:48 +02:00
parent f59a43a4f0
commit 3d48ba8394

View file

@ -500,8 +500,12 @@ int pw_protocol_native_connection_flush(struct pw_protocol_native_connection *co
if (sent < 0) { if (sent < 0) {
if (errno == EINTR) if (errno == EINTR)
continue; continue;
else else {
goto send_error; res = -errno;
pw_log_error("could not sendmsg on fd:%d n_fds:%d: %s",
conn->fd, n_fds, spa_strerror(res));
goto exit;
}
} }
break; break;
} }
@ -513,15 +517,16 @@ int pw_protocol_native_connection_flush(struct pw_protocol_native_connection *co
n_fds -= outfds; n_fds -= outfds;
fds += outfds; fds += outfds;
} }
res = 0;
exit:
if (size > 0)
memmove(buf->buffer_data, data, size);
buf->buffer_size = size; buf->buffer_size = size;
if (n_fds > 0)
memmove(buf->fds, fds, n_fds * sizeof(int));
buf->n_fds = n_fds; buf->n_fds = n_fds;
return 0;
/* ERRORS */
send_error:
res = -errno;
pw_log_error("could not sendmsg on fd:%d n_fds:%d: %s", conn->fd, n_fds, strerror(errno));
return res; return res;
} }