diff options
| author | Martin Willi <martin@revosec.ch> | 2014-11-06 14:40:52 +0100 |
|---|---|---|
| committer | Martin Willi <martin@revosec.ch> | 2014-11-21 12:02:08 +0100 |
| commit | aec3d5fb7fa4105acabd30f82a9461360cd3161b (patch) | |
| tree | 2a614be51762b87775b8b59f3bb4f1a008987ef4 /src/libstrongswan/utils/compat | |
| parent | f65779dd0f8aecb850a32a8b1aa745984c684a18 (diff) | |
| download | strongswan-aec3d5fb7fa4105acabd30f82a9461360cd3161b.tar.bz2 strongswan-aec3d5fb7fa4105acabd30f82a9461360cd3161b.tar.xz | |
apple: Wrap accept() and recvfrom() with poll(2) instead of select
Diffstat (limited to 'src/libstrongswan/utils/compat')
| -rw-r--r-- | src/libstrongswan/utils/compat/apple.h | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/libstrongswan/utils/compat/apple.h b/src/libstrongswan/utils/compat/apple.h index eb24d621d..06a7887e7 100644 --- a/src/libstrongswan/utils/compat/apple.h +++ b/src/libstrongswan/utils/compat/apple.h @@ -39,21 +39,27 @@ * calls to select(2). */ -#define WRAP_WITH_SELECT(func, socket, ...)\ - fd_set rfds; FD_ZERO(&rfds); FD_SET(socket, &rfds);\ - if (select(socket + 1, &rfds, NULL, NULL, NULL) <= 0) { return -1; }\ +#define WRAP_WITH_POLL(func, socket, ...) \ + struct pollfd pfd = { \ + .fd = socket, \ + .events = POLLIN, \ + }; \ + if (poll(&pfd, 1, -1) <= 0) \ + {\ + return -1; \ + }\ return func(socket, __VA_ARGS__) static inline int cancellable_accept(int socket, struct sockaddr *address, socklen_t *address_len) { - WRAP_WITH_SELECT(accept, socket, address, address_len); + WRAP_WITH_POLL(accept, socket, address, address_len); } #define accept cancellable_accept static inline int cancellable_recvfrom(int socket, void *buffer, size_t length, int flags, struct sockaddr *address, socklen_t *address_len) { - WRAP_WITH_SELECT(recvfrom, socket, buffer, length, flags, address, address_len); + WRAP_WITH_POLL(recvfrom, socket, buffer, length, flags, address, address_len); } #define recvfrom cancellable_recvfrom |
