Просмотр исходного кода

Merge branch 'bugfix/disable_vfs_select' into 'master'

VFS: Optionally disable the VFS implementation of select()

See merge request idf/esp-idf!2434
Angus Gratton 7 лет назад
Родитель
Сommit
5bb238dd17
3 измененных файлов с 23 добавлено и 0 удалено
  1. 10 0
      components/lwip/Kconfig
  2. 9 0
      components/newlib/select.c
  3. 4 0
      components/vfs/README.rst

+ 10 - 0
components/lwip/Kconfig

@@ -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

+ 9 - 0
components/newlib/select.c

@@ -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
 }

+ 4 - 0
components/vfs/README.rst

@@ -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
 -----