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:
parent
c9f8470fdf
commit
004bf84d8c
3 changed files with 23 additions and 0 deletions
|
@ -37,6 +37,16 @@ config LWIP_MAX_SOCKETS
|
||||||
the maximum amount of sockets here. The valid value is from 1
|
the maximum amount of sockets here. The valid value is from 1
|
||||||
to 16.
|
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
|
config LWIP_SO_REUSE
|
||||||
bool "Enable SO_REUSEADDR option"
|
bool "Enable SO_REUSEADDR option"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -14,8 +14,17 @@
|
||||||
|
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
#include "esp_vfs.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)
|
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);
|
return esp_vfs_select(nfds, readfds, writefds, errorfds, timeout);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -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`
|
are the :example:`peripherals/uart_select` and the :example:`system/select`
|
||||||
examples.
|
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
|
Paths
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue