pulse sink: check for partial sends
This commit is contained in:
parent
2e17b70fcd
commit
e4d054654f
@ -277,6 +277,19 @@ static int get_display_num_from_display(char *display_text) {
|
||||
return display_num;
|
||||
}
|
||||
|
||||
static int lsend(int fd, char *data, int bytes) {
|
||||
int sent = 0;
|
||||
int error;
|
||||
while (sent < bytes) {
|
||||
error = send(fd, data + sent, bytes - sent, 0);
|
||||
if (error < 1) {
|
||||
return error;
|
||||
}
|
||||
sent += error;
|
||||
}
|
||||
return sent;
|
||||
}
|
||||
|
||||
static int data_send(struct userdata *u, pa_memchunk *chunk) {
|
||||
char *data;
|
||||
int bytes;
|
||||
@ -325,7 +338,7 @@ static int data_send(struct userdata *u, pa_memchunk *chunk) {
|
||||
|
||||
h.code = 0;
|
||||
h.bytes = bytes + 8;
|
||||
if (send(u->fd, &h, 8, 0) != 8) {
|
||||
if (lsend(u->fd, (char*)(&h), 8) != 8) {
|
||||
pa_log("data_send: send failed");
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
@ -336,7 +349,7 @@ static int data_send(struct userdata *u, pa_memchunk *chunk) {
|
||||
|
||||
data = (char*)pa_memblock_acquire(chunk->memblock);
|
||||
data += chunk->index;
|
||||
sent = send(u->fd, data, bytes, 0);
|
||||
sent = lsend(u->fd, data, bytes);
|
||||
pa_memblock_release(chunk->memblock);
|
||||
|
||||
if (sent != bytes) {
|
||||
@ -358,7 +371,7 @@ static int close_send(struct userdata *u) {
|
||||
}
|
||||
h.code = 1;
|
||||
h.bytes = 8;
|
||||
if (send(u->fd, &h, 8, 0) != 8) {
|
||||
if (lsend(u->fd, (char*)(&h), 8) != 8) {
|
||||
pa_log("close_send: send failed");
|
||||
close(u->fd);
|
||||
u->fd = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user