-static void dccp_send(__unused struct audio_format *af,
- long unsigned current_chunk,
- __unused long unsigned chunks_sent, const char *buf, size_t len)
+#define DCCP_RETRIES 100
+
+static int dccp_write(int fd, const char *buf, size_t len)
+{
+ size_t size, written = 0;
+ int ret, retries = 0;
+again:
+ size = PARA_MIN(1024, len - written);
+ ret = write(fd, buf + written, size);
+ if (ret < 0) {
+ if (errno != EAGAIN || !retries++ > DCCP_RETRIES)
+ goto err_out;
+ PARA_DEBUG_LOG("EAGAIN #%d@%zd/%zd\n", retries, written, len);
+ goto again;
+ }
+ retries = 0;
+ written += ret;
+ if (written >= len)
+ return written;
+ ret = write_ok(fd);
+ if (ret > 0)
+ goto again;
+err_out:
+ return -E_DCCP_WRITE;
+}
+
+static void dccp_send(long unsigned current_chunk,
+ __a_unused long unsigned chunks_sent, const char *buf, size_t len)