VFS: Optionally disable the VFS implementation of select()

This allows to temporarily resolve issues like
https://github.com/espressif/esp-idf/issues/1987
while bugs are fixed in the VFS implementation of select().
This commit is contained in:
Roland Dobai 2018-05-23 08:25:46 +02:00
parent c9f8470fdf
commit 004bf84d8c
3 changed files with 23 additions and 0 deletions

View File

@ -37,6 +37,16 @@ config LWIP_MAX_SOCKETS
the maximum amount of sockets here. The valid value is from 1
to 16.
config USE_ONLY_LWIP_SELECT
bool "Support LWIP socket select() only"
default n
help
The virtual filesystem layer of select() redirects sockets to
lwip_select() and non-socket file descriptors to their respective driver
implementations. If this option is enabled then all calls of select()
will be redirected to lwip_select(), therefore, select can be used
for sockets only.
config LWIP_SO_REUSE
bool "Enable SO_REUSEADDR option"
default y

View File

@ -14,8 +14,17 @@
#include <sys/select.h>
#include "esp_vfs.h"
#include "sdkconfig.h"
#ifdef CONFIG_USE_ONLY_LWIP_SELECT
#include "lwip/sockets.h"
#endif
int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout)
{
#ifdef CONFIG_USE_ONLY_LWIP_SELECT
return lwip_select(nfds, readfds, writefds, errorfds, timeout);
#else
return esp_vfs_select(nfds, readfds, writefds, errorfds, timeout);
#endif
}

View File

@ -93,6 +93,10 @@ Examples demonstrating the use of :cpp:func:`select` with VFS file descriptors
are the :example:`peripherals/uart_select` and the :example:`system/select`
examples.
If :cpp:func:`select` is used for socket file descriptors only then one can
enable the :ref:`CONFIG_USE_ONLY_LWIP_SELECT` option which can reduce the code
size and improve performance.
Paths
-----