diff options
author | Martin Willi <martin@revosec.ch> | 2014-11-06 12:11:25 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2014-11-21 11:16:48 +0100 |
commit | fc829ec9fb2f29c4415c5c0b054139a2f47231b0 (patch) | |
tree | 860e589e036639964ac88ebe9e00de6ddf7bc52d /src | |
parent | e796b88e86a719c03d551318dda359b373496ce5 (diff) | |
download | strongswan-fc829ec9fb2f29c4415c5c0b054139a2f47231b0.tar.bz2 strongswan-fc829ec9fb2f29c4415c5c0b054139a2f47231b0.tar.xz |
windows: Provide a poll(2) wrapper calling WSAPoll()
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/utils/utils.h | 1 | ||||
-rw-r--r-- | src/libstrongswan/utils/windows.c | 11 | ||||
-rw-r--r-- | src/libstrongswan/utils/windows.h | 28 |
3 files changed, 40 insertions, 0 deletions
diff --git a/src/libstrongswan/utils/utils.h b/src/libstrongswan/utils/utils.h index da253cc35..9e00b8a7a 100644 --- a/src/libstrongswan/utils/utils.h +++ b/src/libstrongswan/utils/utils.h @@ -37,6 +37,7 @@ # include <netdb.h> # include <netinet/in.h> # include <sched.h> +# include <poll.h> #endif /** diff --git a/src/libstrongswan/utils/windows.c b/src/libstrongswan/utils/windows.c index 8820287b1..6ce9d77c8 100644 --- a/src/libstrongswan/utils/windows.c +++ b/src/libstrongswan/utils/windows.c @@ -13,6 +13,9 @@ * for more details. */ +/* WSAPoll() */ +#define _WIN32_WINNT 0x0600 + #include "utils.h" #include <errno.h> @@ -639,3 +642,11 @@ ssize_t windows_sendto(int sockfd, const void *buf, size_t len, int flags, } return outlen; } + +/** + * See header + */ +int poll(struct pollfd *fds, int nfds, int timeout) +{ + return wserr(WSAPoll(fds, nfds, timeout)); +} diff --git a/src/libstrongswan/utils/windows.h b/src/libstrongswan/utils/windows.h index 3761e10ab..80106ecdb 100644 --- a/src/libstrongswan/utils/windows.h +++ b/src/libstrongswan/utils/windows.h @@ -362,6 +362,34 @@ ssize_t windows_send(int sockfd, const void *buf, size_t len, int flags); ssize_t windows_sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen); +#if _WIN32_WINNT < 0x0600 +/** + * Define pollfd and flags on our own if not specified + */ +struct pollfd { + SOCKET fd; + short events; + short revents; +}; +enum { + POLLERR = 0x0001, + POLLHUP = 0x0002, + POLLNVAL = 0x0004, + POLLWRNORM = 0x0010, + POLLWRBAND = 0x0020, + POLLPRI = 0x0400, + POLLRDNORM = 0x0100, + POLLRDBAND = 0x0200, + POLLIN = POLLRDNORM | POLLRDBAND, + POLLOUT = POLLWRNORM, +}; +#endif /* _WIN32_WINNT < 0x0600 */ + +/** + * poll(2), implemented using Winsock2 WSAPoll() + */ +int poll(struct pollfd *fds, int nfds, int timeout); + /** * Declaration missing on older WinGW */ |