[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT/LWIP PATCH] sockets.c: Add ppoll() function
This ppoll() implementation is adapted from its man page. Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx> --- Config.uk | 6 ++++++ sockets.c | 26 ++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/Config.uk b/Config.uk index 8f501fc..debf0c7 100644 --- a/Config.uk +++ b/Config.uk @@ -170,6 +170,12 @@ if LWIP_SOCKET lwip's select() implementation supports only sockets. This configuration option makes it possible to use other file descriptor types as well, even though they are not supported by lwip. + + config LWIP_SOCKET_PPOLL + bool "Enable ppoll()" + default y + help + Enable ppoll() implementation. endif menuconfig LWIP_DEBUG diff --git a/sockets.c b/sockets.c index c2cf57f..5b499af 100644 --- a/sockets.c +++ b/sockets.c @@ -34,7 +34,11 @@ */ /* network stub calls */ +#include <uk/config.h> #include <sys/time.h> +#if CONFIG_LWIP_SOCKET_PPOLL +#include <signal.h> +#endif #include <vfscore/dentry.h> #include <vfscore/file.h> #include <vfscore/fs.h> @@ -473,6 +477,28 @@ EXIT: return ret; } +#if CONFIG_LWIP_SOCKET_PPOLL +#if CONFIG_LIBPTHREAD_EMBEDDED +#define __sigmask pthread_sigmask +#else +#define __sigmask sigprocmask +#endif +int ppoll(struct pollfd *fds, nfds_t nfds, const struct timespec *tmo_p, + const sigset_t *sigmask) +{ + sigset_t origmask; + int timeout, rc; + + timeout = (tmo_p == NULL) ? -1 : + (tmo_p->tv_sec * 1000 + tmo_p->tv_nsec / 1000000); + __sigmask(SIG_SETMASK, sigmask, &origmask); + rc = poll(fds, nfds, timeout); + __sigmask(SIG_SETMASK, &origmask, NULL); + + return rc; +} +#endif /* CONFIG_LWIP_SOCKET_PPOLL */ + int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout) { -- 2.20.1 _______________________________________________ Minios-devel mailing list Minios-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/minios-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |