From de69edd15ebe96be6a30e8504748fb0240ef95f9 Mon Sep 17 00:00:00 2001 From: Christian Brauner Date: Mon, 3 Sep 2018 02:51:39 +0200 Subject: [PATCH] file_utils: add lxc_recv_nointr() Signed-off-by: Christian Brauner --- src/lxc/file_utils.c | 11 +++++++++++ src/lxc/file_utils.h | 2 ++ 2 files changed, 13 insertions(+) diff --git a/src/lxc/file_utils.c b/src/lxc/file_utils.c index 63e8322d6..1e87f2a24 100644 --- a/src/lxc/file_utils.c +++ b/src/lxc/file_utils.c @@ -117,6 +117,17 @@ again: return ret; } +ssize_t lxc_recv_nointr(int sockfd, void *buf, size_t len, int flags) +{ + ssize_t ret; +again: + ret = recv(sockfd, buf, len, flags); + if (ret < 0 && errno == EINTR) + goto again; + + return ret; +} + ssize_t lxc_read_nointr_expect(int fd, void *buf, size_t count, const void *expected_buf) { ssize_t ret; diff --git a/src/lxc/file_utils.h b/src/lxc/file_utils.h index 9467f53ac..5172b6d15 100644 --- a/src/lxc/file_utils.h +++ b/src/lxc/file_utils.h @@ -40,6 +40,8 @@ extern ssize_t lxc_write_nointr(int fd, const void *buf, size_t count); extern ssize_t lxc_read_nointr(int fd, void *buf, size_t count); extern ssize_t lxc_read_nointr_expect(int fd, void *buf, size_t count, const void *expected_buf); +extern ssize_t lxc_recv_nointr(int sockfd, void *buf, size_t len, int flags); + extern bool file_exists(const char *f); extern int print_to_file(const char *file, const char *content); extern int is_dir(const char *path);