Lwip_recv_tcp delay

Hello!
I’m working with FreeRTOS 202210.01, my task is to transfer files to an FTP server. I use the FTP library provided by the developer and I manage to connect and transfer files. The problem is that at a random moment the transmission stops and in wireshark I see an error related to an attempt to retransmit the packet.
Also sometimes I get stuck in the recv() (lwip_recv_tcp) function from lwip_recvfrom (sockets.c). It seems to me that I haven’t fully configured lwipopts.h. My version is LWiP 2.1.2. I will be glad for any help, and I am attaching the lwipopts.h file:

#ifndef LWIP_HDR_LWIPOPTS_H
#define LWIP_HDR_LWIPOPTS_H

#include <platform_stdlib.h>
#include "platform_opts.h"

#define CONFIG_VIDEO_APPLICATION 1

/**
 * SYS_LIGHTWEIGHT_PROT==1: if you want inter-task protection for certain
 * critical regions during buffer allocation, deallocation and memory
 * allocation and deallocation.
 */
#define SYS_LIGHTWEIGHT_PROT    1

/* Define LWIP_COMPAT_MUTEX if the port has no mutexes and binary semaphores
 should be used instead */
#define LWIP_COMPAT_MUTEX       1

#define ETHARP_TRUST_IP_MAC     0
#define IP_REASSEMBLY           1
#define IP_FRAG                 1
#define ARP_QUEUEING            0

#ifndef CONFIG_LWIP_DHCP_COARSE_TIMER
#define CONFIG_LWIP_DHCP_COARSE_TIMER		0
#endif
/**
 * NO_SYS==1: Provides VERY minimal functionality. Otherwise,
 * use lwIP facilities.
 */
#define NO_SYS                  0

#ifndef CONFIG_DYNAMIC_TICKLESS
#define CONFIG_DYNAMIC_TICKLESS 0
#endif

//Enlarge SKB buffer number
#define MAX_SKB_BUF_NUM      1024

/* ---------- Memory options ---------- */
/* MEM_ALIGNMENT: should be set to the alignment of the CPU for which
   lwIP is compiled. 4 byte alignment -> define MEM_ALIGNMENT to 4, 2
   byte alignment -> define MEM_ALIGNMENT to 2. */

#define MEM_ALIGNMENT           4

/* MEM_SIZE: the size of the heap memory. If the application will send
a lot of data that needs to be copied, this should be set high. */

#define MEM_SIZE                (64*1024)

/* MEMP_NUM_PBUF: the number of memp struct pbufs. If the application
   sends a lot of data out of ROM (or other static memory), this
   should be set high. */
#define MEMP_NUM_PBUF           100
/* MEMP_NUM_UDP_PCB: the number of UDP protocol control blocks. One
   per active UDP "connection". */
#define MEMP_NUM_UDP_PCB        6
/* MEMP_NUM_TCP_PCB: the number of simulatenously active TCP
   connections. */
#define MEMP_NUM_TCP_PCB        10
/* MEMP_NUM_TCP_PCB_LISTEN: the number of listening TCP
   connections. */
#define MEMP_NUM_TCP_PCB_LISTEN 10
/* MEMP_NUM_TCP_SEG: the number of simultaneously queued TCP
   segments. */
#define MEMP_NUM_TCP_SEG        20

/* MEMP_NUM_SYS_TIMEOUT: the number of simulateously active
   timeouts. */
#define MEMP_NUM_SYS_TIMEOUT    10

#define MEMP_NUM_NETCONN        8

/* ---------- Pbuf options ---------- */
/* PBUF_POOL_SIZE: the number of buffers in the pbuf pool. */
#define PBUF_POOL_SIZE          60

/* IP_REASS_MAX_PBUFS: Total maximum amount of pbufs waiting to be reassembled.*/
#define IP_REASS_MAX_PBUFS              60  //10

/* PBUF_POOL_BUFSIZE: the size of each pbuf in the pbuf pool. */
#define PBUF_POOL_BUFSIZE       1500 //508


/* ---------- TCP options ---------- */
#define LWIP_TCP                1
#define TCP_TTL                 255

/* Controls if TCP should queue segments that arrive out of
   order. Define to 0 if your device is low on memory. */
#define TCP_QUEUE_OOSEQ         1

/* TCP Maximum segment size. */
#define TCP_MSS                 (1500 - 40)	  /* TCP_MSS = (Ethernet MTU - IP header size - TCP header size) */


/* TCP sender buffer space (bytes). */
#define TCP_SND_BUF             (10*TCP_MSS)  //(5*TCP_MSS)

/*  TCP_SND_QUEUELEN: TCP sender buffer space (pbufs). This must be at least
  as much as (2 * TCP_SND_BUF/TCP_MSS) for things to work. */
#define TCP_SND_QUEUELEN        (4* TCP_SND_BUF/TCP_MSS)


/* TCP receive window. */
#define TCP_WND                 (4*TCP_MSS)		// (2*TCP_MSS)


/* ---------- ICMP options ---------- */
#define LWIP_ICMP                       1

/* ---------- ARP options ----------- */
#define LWIP_ARP                        1

/* ---------- DHCP options ---------- */
/* Define LWIP_DHCP to 1 if you want DHCP configuration of
   interfaces. DHCP is not implemented in lwIP 0.5.1, however, so
   turning this on does currently not work. */
#define LWIP_DHCP               1


/* ---------- UDP options ---------- */
#define LWIP_UDP                1
#define UDP_TTL                 255
/* ---------- DNS options ---------- */
#define LWIP_DNS                1

/* ---------- UPNP options --------- */
#define LWIP_UPNP               0

/* ---------- SO_SNDRCVTIMEO_NONSTANDARD options --------- */
#define LWIP_SO_SNDRCVTIMEO_NONSTANDARD 1

/* ---------- SO_REUSE options --------- */
#define SO_REUSE                        1

/* Support Multicast */
#define LWIP_IGMP                   1
#define LWIP_RAND()                 rand()
extern unsigned int sys_now(void);
#define LWIP_SRAND()                srand(sys_now())

#define LWIP_MTU_ADJUST 		1

/* Support TCP Keepalive */
#define LWIP_TCP_KEEPALIVE				1

#if defined(CONFIG_VIDEO_APPLICATION) && CONFIG_VIDEO_APPLICATION
#undef	LWIP_WND_SCALE
#define	LWIP_WND_SCALE                  1

#undef	TCP_RCV_SCALE
#define	TCP_RCV_SCALE                   1

#undef MEM_SIZE
#define MEM_SIZE (512*1024)

#undef PBUF_POOL_SIZE
#define PBUF_POOL_SIZE 880

#undef MEMP_NUM_NETBUF
#define MEMP_NUM_NETBUF 60

#undef IP_REASS_MAX_PBUFS
#define IP_REASS_MAX_PBUFS 40

#undef TCP_SND_BUF
#define TCP_SND_BUF (80*TCP_MSS)

#undef TCP_SND_QUEUELEN
#define TCP_SND_QUEUELEN (6*TCP_SND_BUF/TCP_MSS)

#undef MEMP_NUM_TCP_SEG
#define MEMP_NUM_TCP_SEG TCP_SND_QUEUELEN

#undef TCP_WND
#define TCP_WND (80*TCP_MSS)

#undef MEMP_NUM_NETCONN
#define MEMP_NUM_NETCONN        64

#undef MEMP_NUM_UDP_PCB
#define MEMP_NUM_UDP_PCB        MEMP_NUM_NETCONN

#undef MEMP_NUM_TCP_PCB
#define MEMP_NUM_TCP_PCB        MEMP_NUM_NETCONN

#undef MEMP_NUM_TCP_PCB_LISTEN
#define MEMP_NUM_TCP_PCB_LISTEN MEMP_NUM_NETCONN

#undef LWIP_SO_SNDTIMEO
#define LWIP_SO_SNDTIMEO                		1

#endif

/* ---------- Statistics options ---------- */
#define LWIP_STATS 0
#undef LWIP_PROVIDE_ERRNO
#ifndef _SYS_ERRNO_H_
#define LWIP_ERRNO_INCLUDE <sys/errno.h>
#else
#undef LWIP_ERRNO_INCLUDE
#endif


/*
   --------------------------------------
   ---------- Checksum options ----------
   --------------------------------------
*/

/*
Certain platform allows computing and verifying the IP, UDP, TCP and ICMP checksums by hardware:
 - To use this feature let the following define uncommented.
 - To disable it and process by CPU comment the  the checksum.
*/
//Do checksum by lwip - WLAN nic does not support Checksum offload
//#define CHECKSUM_BY_HARDWARE

/* CHECKSUM_GEN_IP==1: Generate checksums in software for outgoing IP packets.*/
#define CHECKSUM_GEN_IP                 1
/* CHECKSUM_GEN_UDP==1: Generate checksums in software for outgoing UDP packets.*/
#define CHECKSUM_GEN_UDP                1
/* CHECKSUM_GEN_TCP==1: Generate checksums in software for outgoing TCP packets.*/
#define CHECKSUM_GEN_TCP                1
/* CHECKSUM_CHECK_IP==1: Check checksums in software for incoming IP packets.*/
#define CHECKSUM_CHECK_IP               1
/* CHECKSUM_CHECK_UDP==1: Check checksums in software for incoming UDP packets.*/
#define CHECKSUM_CHECK_UDP              1
/* CHECKSUM_CHECK_TCP==1: Check checksums in software for incoming TCP packets.*/
#define CHECKSUM_CHECK_TCP              1

/*
   ----------------------------------------------
   ---------- Sequential layer options ----------
   ----------------------------------------------
*/
/**
 * LWIP_NETCONN==1: Enable Netconn API (require to use api_lib.c)
 */
#define LWIP_NETCONN                    1

/*
   ------------------------------------
   ---------- Socket options ----------
   ------------------------------------
*/
/**
 * LWIP_SOCKET==1: Enable Socket API (require to use sockets.c)
 */
#define LWIP_SOCKET                     1

/*
   -----------------------------------
   ---------- DEBUG options ----------
   -----------------------------------
*/

#define LWIP_DEBUG                      0


/*
   ---------------------------------
   ---------- OS options ----------
   ---------------------------------
*/

#define TCPIP_THREAD_STACKSIZE          1000
#if defined(CONFIG_VIDEO_APPLICATION) && CONFIG_VIDEO_APPLICATION
#define TCPIP_MBOX_SIZE                 600
#define DEFAULT_UDP_RECVMBOX_SIZE       600
#define DEFAULT_TCP_RECVMBOX_SIZE       600
#define DEFAULT_RAW_RECVMBOX_SIZE       600
#define DEFAULT_ACCEPTMBOX_SIZE         600

#define DEFAULT_THREAD_STACKSIZE        1000
//#define TCPIP_THREAD_PRIO               (configMAX_PRIORITIES - 2)
#define TCPIP_THREAD_PRIO               (2)

#define ETHARP_SUPPORT_STATIC_ENTRIES   1

#define LWIP_RANDOMIZE_INITIAL_LOCAL_PORTS 1
#define LWIP_DNS_LEGACY_SUPPORT 0
#define LWIP_ICMP_SUPPRESS 0
#define LWIP_ICMP_SUPPRESS_INTERVAL 900 // allow one icmp per second with tolerance of 100 ms

/* Extra options for lwip_v2.0.2 which should not affect lwip_v1.4.1 */
#define LWIP_TCPIP_CORE_LOCKING         1
#define LWIP_COMPAT_MUTEX_ALLOWED		1 // mycode: enable with core locking
#define LWIP_TCPIP_TIMEOUT              1
#define LWIP_SO_RCVTIMEO                1
#define LWIP_SOCKET_SET_ERRNO           0
#undef LWIP_DEBUG
#define LWIP_RAW                        1
#define LWIP_AUTOIP                     1
#define TCPIP_THREAD_NAME              "TCP_IP"

#define LWIP_IPV6                       1
#if LWIP_IPV6
#undef  MEMP_NUM_SYS_TIMEOUT
#define MEMP_NUM_SYS_TIMEOUT            13
#endif

#ifndef CONFIG_EXAMPLE_COAP_SERVER
#define CONFIG_EXAMPLE_COAP_SERVER 0
#endif

#ifndef CONFIG_EXAMPLE_COAP_CLIENT
#define CONFIG_EXAMPLE_COAP_CLIENT 0
#endif

#include "lwip/init.h"                  //for version control

#if defined(CONFIG_VIDEO_APPLICATION) && CONFIG_VIDEO_APPLICATION
#undef ERRNO
#define ERRNO                           1
#undef LWIP_SOCKET_SET_ERRNO
#define LWIP_SOCKET_SET_ERRNO           1
#endif

#endif /* LWIP_HDR_LWIPOPTS_H */

This question seems related to LWIP and therefore, I’d recommend asking on LWIP forums as you are likely to get better response there.

hello, @aggarg !
After studying the wireshark logs a little, I realized that the controller sometimes does not send an ack to the received fin, maybe you have any idea what this might be connected with? Can you suggest popular forums on the topic lwip?

I am not sure but a quick Google search gives the following mailing lists that you can use - https://savannah.nongnu.org/mail/?group=lwip.