Error check fcntl() calls
[fio.git] / libfio.c
index 3fde492c91af727f6d96abf39c308d3ca4b657c7..5ed8c6073603d4edb0b381fb356694cce600e04b 100644 (file)
--- a/libfio.c
+++ b/libfio.c
@@ -27,6 +27,7 @@
 #include <signal.h>
 #include <stdint.h>
 #include <locale.h>
+#include <fcntl.h>
 
 #include "fio.h"
 #include "smalloc.h"
@@ -233,6 +234,21 @@ int fio_running_or_pending_io_threads(void)
        return 0;
 }
 
+void fio_set_fd_nonblocking(int fd, const char *who)
+{
+       int flags;
+
+       flags = fcntl(fd, F_GETFL);
+       if (flags < 0)
+               log_err("fio: %s failed to get file flags: %s\n", who, strerror(errno));
+       else {
+               flags |= O_NONBLOCK;
+               flags = fcntl(fd, F_SETFL, flags);
+               if (flags < 0)
+                       log_err("fio: %s failed to get file flags: %s\n", who, strerror(errno));
+       }
+}
+
 static int endian_check(void)
 {
        union {