diff options
author | Corinna Vinschen <corinna@vinschen.de> | 2000-10-23 20:16:52 +0000 |
---|---|---|
committer | Corinna Vinschen <corinna@vinschen.de> | 2000-10-23 20:16:52 +0000 |
commit | 1eb14bae8cc488dad2da4925cb73e4376c69fe45 (patch) | |
tree | 105a09afcbb92f6c87105b135f26397cc7866f3e /winsup/cygwin/net.cc | |
parent | f80cdaeecbe2f65d2b6026bd25923cca7c9ab455 (diff) | |
download | cygnal-1eb14bae8cc488dad2da4925cb73e4376c69fe45.tar.gz cygnal-1eb14bae8cc488dad2da4925cb73e4376c69fe45.tar.bz2 cygnal-1eb14bae8cc488dad2da4925cb73e4376c69fe45.zip |
* fcntl.cc (_fcntl): Rearrange as wrapper function. Move all
functionality except F_DUPFD to fhandler classes.
* fhandler.cc (fhandler_base::fcntl): New method.
* net.cc (fhandler_socket::fcntl): Ditto.
* fhandler.h (class fhandler_base): Add method prototype for fcntl().
(class fhandler_socket): Ditto.
Diffstat (limited to 'winsup/cygwin/net.cc')
-rw-r--r-- | winsup/cygwin/net.cc | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index bb33bca57..10153f417 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -1957,7 +1957,7 @@ fhandler_socket::ioctl (unsigned int cmd, void *p) set_async (*(int *) p); break; default: - /* We must cancel WSAAsyncSelect (if any) before settting socket to + /* We must cancel WSAAsyncSelect (if any) before setting socket to * blocking mode */ if (cmd == FIONBIO && *(int *) p == 0) @@ -1979,6 +1979,31 @@ fhandler_socket::ioctl (unsigned int cmd, void *p) return res; } +int +fhandler_socket::fcntl (int cmd, void *arg) +{ + int res = 0; + int request, current; + + switch (cmd) + { + case F_SETFL: + request = ((int) arg & O_NONBLOCK) ? 1 : 0; + current = (get_flags () & O_NONBLOCK) ? 1 : 0; + if (request != current && (res = ioctl (FIONBIO, &request))) + break; + if (request) + set_flags (get_flags () | O_NONBLOCK); + else + set_flags (get_flags () & ~O_NONBLOCK); + break; + default: + res = fhandler_base::fcntl (cmd, arg); + break; + } + return res; +} + extern "C" { /* Initialize WinSock */ LoadDLLinitfunc (wsock32) |