diff --git a/repos/libports/include/lwip/lwipopts.h b/repos/libports/include/lwip/lwipopts.h index 56035323e1..bef50f5917 100644 --- a/repos/libports/include/lwip/lwipopts.h +++ b/repos/libports/include/lwip/lwipopts.h @@ -36,6 +36,7 @@ extern "C" { #define LWIP_NETIF_LOOPBACK 1 /* Looping back to same address? */ #define LWIP_STATS 0 /* disable stating */ #define LWIP_TCP_TIMESTAMPS 1 +#define TCP_LISTEN_BACKLOG 1 #define TCP_MSS 1460 #define TCP_WND (32 * TCP_MSS) #define TCP_SND_BUF (32 * TCP_MSS) diff --git a/repos/libports/src/lib/vfs/lwip/vfs.cc b/repos/libports/src/lib/vfs/lwip/vfs.cc index c7e7475415..ab5f3b272b 100644 --- a/repos/libports/src/lib/vfs/lwip/vfs.cc +++ b/repos/libports/src/lib/vfs/lwip/vfs.cc @@ -1040,10 +1040,6 @@ class Lwip::Tcp_socket_dir final : /* tcp_sent(_pcb, tcp_sent_callback); */ tcp_err(_pcb, tcp_err_callback); - - if (pcb) { - tcp_backlog_accepted(_pcb); - } } ~Tcp_socket_dir() @@ -1069,6 +1065,8 @@ class Lwip::Tcp_socket_dir final : Pcb_pending *elem = new (alloc) Pcb_pending(newpcb); _pcb_pending.insert(elem); + tcp_backlog_delayed(newpcb); + tcp_arg(newpcb, elem); tcp_recv(newpcb, tcp_delayed_recv_callback); @@ -1250,6 +1248,8 @@ class Lwip::Tcp_socket_dir final : handle.socket = &new_dir; new_dir.handles.insert(&handle); + tcp_backlog_accepted(pp->pcb); + _pcb_pending.remove(pp); destroy(alloc, pp);