diff options
Diffstat (limited to 'src/VideoPlayer.cpp')
-rw-r--r-- | src/VideoPlayer.cpp | 32 |
1 files changed, 29 insertions, 3 deletions
diff --git a/src/VideoPlayer.cpp b/src/VideoPlayer.cpp index f9ae04d..75871da 100644 --- a/src/VideoPlayer.cpp +++ b/src/VideoPlayer.cpp @@ -16,6 +16,32 @@ #include <fcntl.h> #include <signal.h> +static ssize_t read_eintr(int fd, void *buffer, size_t size) { + while(true) { + ssize_t bytes_read = read(fd, buffer, size); + if(bytes_read == -1) { + if(errno != EINTR) + return -1; + } else { + return bytes_read; + } + } +} + +static ssize_t write_all(int fd, const void *buffer, size_t size) { + ssize_t bytes_written = 0; + while((size_t)bytes_written < size) { + ssize_t written = write(fd, (char*)buffer + bytes_written, size - bytes_written); + if(written == -1) { + if(errno != EINTR) + return -1; + } else { + bytes_written += written; + } + } + return bytes_written; +} + namespace QuickMedia { static const double RETRY_TIME_SEC = 0.5; static const int MAX_RETRIES_CONNECT = 1000; @@ -162,7 +188,7 @@ namespace QuickMedia { "--cache=yes", "--cache-on-disk=yes", "--cache-secs=86400", // 24 hours - "--sub-font-size=40", + "--sub-font-size=60", "--sub-margin-y=45", "--sub-border-size=1.95", //"--force_all_formats=no", @@ -376,7 +402,7 @@ namespace QuickMedia { std::string json_errors; char buffer[2048]; - ssize_t bytes_read = read(ipc_socket, buffer, sizeof(buffer)); + ssize_t bytes_read = read_eintr(ipc_socket, buffer, sizeof(buffer)); if(bytes_read == -1) { int err = errno; if(err != EAGAIN && err != EWOULDBLOCK) { @@ -517,7 +543,7 @@ namespace QuickMedia { if(!connected_to_ipc) return Error::FAIL_NOT_CONNECTED; - if(send(ipc_socket, cmd, size, 0) == -1) { + if(write_all(ipc_socket, cmd, size) == -1) { fprintf(stderr, "Failed to send to ipc socket, error: %s, command: %.*s\n", strerror(errno), (int)size, cmd); return Error::FAIL_TO_SEND; } |