|
[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
Reviewed-by: Stefan Teodorescu <stefanl.teodorescu@xxxxxxxxx>
On Sun, Nov 17, 2019 at 9:39 AM Stefan Teodorescu
<stefanl.teodorescu@xxxxxxxxx> wrote:
>
> 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 |