From 91031a75a1d3ece259ed7e02fd9396947abdbac0 Mon Sep 17 00:00:00 2001
From: Paul Sokolovsky <pfalcon@users.sourceforge.net>
Date: Fri, 25 Mar 2016 20:53:52 +0200
Subject: [PATCH] extmod/modlwip: lwip_socket_setsockopt: Handle option value
 properly.

---
 extmod/modlwip.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/extmod/modlwip.c b/extmod/modlwip.c
index 2df3fde9e..84383516f 100644
--- a/extmod/modlwip.c
+++ b/extmod/modlwip.c
@@ -48,6 +48,9 @@
 #ifndef ip_set_option
 #define ip_set_option(pcb, opt)   ((pcb)->so_options |= (opt))
 #endif
+#ifndef ip_reset_option
+#define ip_reset_option(pcb, opt) ((pcb)->so_options &= ~(opt))
+#endif
 
 #ifdef MICROPY_PY_LWIP_SLIP
 #include "netif/slipif.h"
@@ -941,8 +944,11 @@ STATIC mp_obj_t lwip_socket_setsockopt(mp_uint_t n_args, const mp_obj_t *args) {
     switch (mp_obj_get_int(args[2])) {
         case SOF_REUSEADDR:
             // Options are common for UDP and TCP pcb's.
-            // TODO: handle val
-            ip_set_option(socket->pcb.tcp, SOF_REUSEADDR);
+            if (val) {
+                ip_set_option(socket->pcb.tcp, SOF_REUSEADDR);
+            } else {
+                ip_reset_option(socket->pcb.tcp, SOF_REUSEADDR);
+            }
             break;
         default:
             printf("Warning: lwip.setsockopt() not implemented\n");
-- 
GitLab