|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Minios-devel] [UNIKRAFT/LWIP PATCH] sockets.c: Make select() not return errors when using it with file descriptor types other than sockets
Everything looks good, but I would write a help message for this
option that makes it more clear to the user that their file descriptor
(anything else than what is supported by lwip) *will be ignored*.
The current message might make them understand that select() will
support the fds not supported by lwip.
On Sun, Nov 17, 2019 at 1:46 AM Costin Lupu <costin.lupu@xxxxxxxxx> wrote:
>
> lwip's select() implementation supports only sockets. Up until now, we
> returned
> errors when using select() with other file descriptor types. These changes
> make
> it possible to use other file descriptor types as well, even though we won't
> receive any notifications for those.
>
> Signed-off-by: Costin Lupu <costin.lupu@xxxxxxxxx>
> ---
> Config.uk | 10 ++++++++++
> sockets.c | 24 ++++++++++++++++++++++++
> 2 files changed, 34 insertions(+)
>
> diff --git a/Config.uk b/Config.uk
> index 92df4d3..8f501fc 100644
> --- a/Config.uk
> +++ b/Config.uk
> @@ -162,6 +162,16 @@ config LWIP_SOCKET
> depends on LWIP_THREADS && (LWIP_UDP || LWIP_TCP)
> default y
>
> +if LWIP_SOCKET
> + config LWIP_SOCKET_SELECT_GENERIC_FDS
> + bool "Use select() with any file descriptor type"
> + default y
> + help
> + 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.
> +endif
> +
> menuconfig LWIP_DEBUG
> bool "Debug messages"
> default n
> diff --git a/sockets.c b/sockets.c
> index cd84b97..c2cf57f 100644
> --- a/sockets.c
> +++ b/sockets.c
> @@ -497,12 +497,20 @@ int select(int nfds, fd_set *readfds, fd_set *writefds,
> fd_set *exceptfds,
> if (readfds && FD_ISSET(i, readfds)) {
> file = sock_net_file_get(i);
> if (PTRISERR(file)) {
> +#if CONFIG_LWIP_SOCKET_SELECT_GENERIC_FDS
> + /* We allow other fd types, but we don't
> support them */
> + if (PTR2ERR(file) == -EBADF) {
> + FD_CLR(i, readfds);
> + continue;
> + }
> +#else
> LWIP_DEBUGF(SOCKETS_DEBUG,
> ("failed to identify socket
> descriptor\n"));
> ret = -1;
> /* Setting the errno */
> SOCK_NET_SET_ERRNO(PTR2ERR(file));
> goto EXIT;
> +#endif
> }
> if (maxfd < file->sock_fd)
> maxfd = file->sock_fd;
> @@ -512,12 +520,20 @@ int select(int nfds, fd_set *readfds, fd_set *writefds,
> fd_set *exceptfds,
> if (writefds && FD_ISSET(i, writefds)) {
> file = sock_net_file_get(i);
> if (PTRISERR(file)) {
> +#if CONFIG_LWIP_SOCKET_SELECT_GENERIC_FDS
> + /* We allow other fd types, but we don't
> support them */
> + if (PTR2ERR(file) == -EBADF) {
> + FD_CLR(i, writefds);
> + continue;
> + }
> +#else
> LWIP_DEBUGF(SOCKETS_DEBUG,
> ("failed to identify socket
> descriptor\n"));
> ret = -1;
> /* Setting the errno */
> SOCK_NET_SET_ERRNO(PTR2ERR(file));
> goto EXIT;
> +#endif
> }
> if (maxfd < file->sock_fd)
> maxfd = file->sock_fd;
> @@ -527,12 +543,20 @@ int select(int nfds, fd_set *readfds, fd_set *writefds,
> fd_set *exceptfds,
> if (exceptfds && FD_ISSET(i, exceptfds)) {
> file = sock_net_file_get(i);
> if (PTRISERR(file)) {
> +#if CONFIG_LWIP_SOCKET_SELECT_GENERIC_FDS
> + /* We allow other fd types, but we don't
> support them */
> + if (PTR2ERR(file) == -EBADF) {
> + FD_CLR(i, exceptfds);
> + continue;
> + }
> +#else
> LWIP_DEBUGF(SOCKETS_DEBUG,
> ("failed to identify socket
> descriptor\n"));
> ret = -1;
> /* Setting the errno */
> SOCK_NET_SET_ERRNO(PTR2ERR(file));
> goto EXIT;
> +#endif
> }
> if (maxfd < file->sock_fd)
> maxfd = file->sock_fd;
> --
> 2.20.1
>
>
> _______________________________________________
> Minios-devel mailing list
> Minios-devel@xxxxxxxxxxxxxxxxxxxx
> https://lists.xenproject.org/mailman/listinfo/minios-devel
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |