提交 2737b6c2 编写于 作者: D Daniel P. Berrange

Add virSetBlocking() to allow O_NONBLOCK to be toggle on or off

The virSetNonBlock() API only allows enabling non-blocking
operations. It doesn't allow turning blocking back on. Add
a new API to allow arbitrary toggling.

* src/libvirt_private.syms, src/util/util.h
  src/util/util.c: Add virSetBlocking
上级 30a50fc3
......@@ -910,6 +910,7 @@ virRandom;
virRandomInitialize;
virRun;
virRunWithHook;
virSetBlocking;
virSetCloseExec;
virSetNonBlock;
virSetUIDGID;
......
......@@ -244,16 +244,19 @@ virArgvToString(const char *const *argv)
return ret;
}
int virSetNonBlock(int fd) {
int virSetBlocking(int fd, bool blocking) {
#ifndef WIN32
int flags;
if ((flags = fcntl(fd, F_GETFL)) < 0)
return -1;
flags |= O_NONBLOCK;
if (blocking)
flags &= ~O_NONBLOCK;
else
flags |= O_NONBLOCK;
if ((fcntl(fd, F_SETFL, flags)) < 0)
return -1;
#else
unsigned long flag = 1;
unsigned long flag = blocking ? 0 : 1;
/* This is actually Gnulib's replacement rpl_ioctl function.
* We can't call ioctlsocket directly in any case.
......@@ -264,6 +267,10 @@ int virSetNonBlock(int fd) {
return 0;
}
int virSetNonBlock(int fd) {
return virSetBlocking(fd, false);
}
#ifndef WIN32
......
......@@ -49,6 +49,7 @@ enum {
VIR_EXEC_CLEAR_CAPS = (1 << 2),
};
int virSetBlocking(int fd, bool blocking) ATTRIBUTE_RETURN_CHECK;
int virSetNonBlock(int fd) ATTRIBUTE_RETURN_CHECK;
int virSetCloseExec(int fd) ATTRIBUTE_RETURN_CHECK;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册