diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:37:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:37:10 +0000 |
commit | c9addba5cc770d2d231b34f6739f32c6be8690f1 (patch) | |
tree | c643da154a95a1d163137135050bb47858a1654e /gl/lib/nonblocking.h | |
parent | Initial commit. (diff) | |
download | man-db-c9addba5cc770d2d231b34f6739f32c6be8690f1.tar.xz man-db-c9addba5cc770d2d231b34f6739f32c6be8690f1.zip |
Adding upstream version 2.12.0.upstream/2.12.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'gl/lib/nonblocking.h')
-rw-r--r-- | gl/lib/nonblocking.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/gl/lib/nonblocking.h b/gl/lib/nonblocking.h new file mode 100644 index 0000000..2bb2c27 --- /dev/null +++ b/gl/lib/nonblocking.h @@ -0,0 +1,60 @@ +/* Non-blocking I/O for pipe or socket descriptors. + Copyright (C) 2011-2023 Free Software Foundation, Inc. + + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. + + This file is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. */ + +#ifndef _NONBLOCKING_H +#define _NONBLOCKING_H + +/* Non-blocking I/O is an I/O mode by which read(), write() calls avoid + blocking the current thread. When non-blocking is enabled: + - A read() call returns -1 with errno set to EAGAIN when no data or EOF + information is immediately available. + - A write() call returns -1 with errno set to EAGAIN when it cannot + transport the requested amount of data (but at most one pipe buffer) + without blocking. + Non-blocking I/O is most useful for character devices, pipes, and sockets. + Whether it also works on regular files and block devices is platform + dependent. + + There are three modern alternatives to non-blocking I/O: + - use select() or poll() followed by read() or write() if the descriptor + is ready, + - call read() or write() in separate threads, + - use <aio.h> interfaces. */ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/* Return 1 if I/O to the descriptor DESC is currently non-blocking, 0 + it is blocking, or -1 with errno set if fd is invalid or blocking + status cannot be determined (such as with sockets on mingw). */ +extern int get_nonblocking_flag (int desc); + +/* Specify the non-blocking flag for the descriptor DESC. + Return 0 upon success, or -1 with errno set upon failure. + The default depends on the presence of the O_NONBLOCK flag for files + or pipes opened with open() or on the presence of the SOCK_NONBLOCK + flag for sockets. */ +extern int set_nonblocking_flag (int desc, bool value); + + +#ifdef __cplusplus +} +#endif + +#endif /* _NONBLOCKING_H */ |