server tcp - Memory Leak
Posted: Mon Apr 29, 2019 12:31 pm
Hello,
It seems that closing the socket does not slow down the memory:
a piece of code:
It seems that closing the socket does not slow down the memory:
does anyone have an idea why this is happening?[0;32mI (67366) TestHeap: Free Heap size: 213628[0m
[0;32mI (68366) TestHeap: Free Heap size: 213628[0m
[0;32mI (69366) TestHeap: Free Heap size: 213628[0m
[0;32mI (70366) TestHeap: Free Heap size: 213628[0m
[0;32mI (71366) TestHeap: Free Heap size: 213628[0m
[0;32mI (71816) LL: >>Accepted new connection[0m
[0;32mI (72366) TestHeap: Free Heap size: 213128[0m
[0;32mI (73016) LL: >>Other side closed connection[0m
[0;32mI (73366) TestHeap: Free Heap size: 213360[0m
[0;32mI (74366) TestHeap: Free Heap size: 213364[0m
[0;32mI (74426) LL: >>Accepted new connection[0m
[0;32mI (75366) TestHeap: Free Heap size: 212876[0m
[0;32mI (75826) LL: >>Other side closed connection[0m
[0;32mI (76366) TestHeap: Free Heap size: 213100[0m
[0;32mI (77366) TestHeap: Free Heap size: 213100[0m
[0;32mI (77536) LL: >>Accepted new connection[0m
[0;32mI (78366) TestHeap: Free Heap size: 212616[0m
[0;32mI (79366) TestHeap: Free Heap size: 212616[0m
[0;32mI (79436) LL: >>Other side closed connection[0m
[0;32mI (80366) TestHeap: Free Heap size: 212840[0m
[0;32mI (81246) LL: >>Accepted new connection[0m
[0;32mI (81366) TestHeap: Free Heap size: 212352[0m
[0;32mI (82366) TestHeap: Free Heap size: 212352[0m
[0;32mI (83366) TestHeap: Free Heap size: 212352[0m
[0;32mI (83556) LL: >>Other side closed connection[0m
[0;32mI (84366) TestHeap: Free Heap size: 212576[0m
[0;32mI (85266) LL: >>Accepted new connection[0m
[0;32mI (85366) TestHeap: Free Heap size: 212084[0m
[0;32mI (86366) TestHeap: Free Heap size: 212088[0m
[0;32mI (87366) TestHeap: Free Heap size: 212088[0m
[0;32mI (88066) LL: >>Other side closed connection[0m
[0;32mI (88366) TestHeap: Free Heap size: 212312[0m
[0;32mI (89366) TestHeap: Free Heap size: 212312[0m
[0;32mI (90366) TestHeap: Free Heap size: 212312[0m
[0;32mI (90986) LL: >>Accepted new connection[0m
[0;32mI (91366) TestHeap: Free Heap size: 211824[0m
[0;32mI (92186) LL: >>Other side closed connection[0m
[0;32mI (92366) TestHeap: Free Heap size: 212048[0m
[0;32mI (93366) TestHeap: Free Heap size: 212048[0m
[0;32mI (93386) LL: >>Accepted new connection[0m
[0;32mI (94366) TestHeap: Free Heap size: 211564[0m
[0;32mI (94896) LL: >>Other side closed connection[0m
[0;32mI (95366) TestHeap: Free Heap size: 211788[0m
[0;32mI (96366) TestHeap: Free Heap size: 211788[0m
[0;32mI (97206) LL: >>Accepted new connection[0m
[0;32mI (97366) TestHeap: Free Heap size: 211300[0m
[0;32mI (98366) TestHeap: Free Heap size: 211300[0m
[0;32mI (98606) LL: >>Other side closed connection[0m
[0;32mI (99366) TestHeap: Free Heap size: 211524[0m
[0;32mI (99616) LL: >>Accepted new connection[0m
[0;32mI (100366) TestHeap: Free Heap size: 211040[0m
[0;32mI (101016) LL: >>Other side closed connection[0m
[0;32mI (101366) TestHeap: Free Heap size: 211264[0m
[0;32mI (102366) TestHeap: Free Heap size: 211264[0m
[0;31mE (102626) LL: Unable to accept connection: errno 23[0m
[0;32mI (103366) TestHeap: Free Heap size: 211040[0m
[0;32mI (104366) TestHeap: Free Heap size: 211040[0m
[0;32mI (105366) TestHeap: Free Heap size: 211040[0m
[0;31mE (105626) LL: Unable to accept connection: errno 113[0m
[0;32mI (106366) TestHeap: Free Heap size: 211156[0m
[0;32mI (107366) TestHeap: Free Heap size: 211156[0m
[0;32mI (108366) TestHeap: Free Heap size: 211156[0m
netconn_accept: invalid acceptmbox
[0;31mE (108626) LL: Unable to accept connection: errno 5[0m
[0;32mI (109366) TestHeap: Free Heap size: 211156[0m
a piece of code:
Code: Select all
static void
local_lan_socket(void *arg)
{
//LWIP_UNUSED_ARG(arg);
ESP_LOGI(TAG, ":::::::::arg: %04X", (uint32_t)arg);
#ifdef IPV6_LL
struct sockaddr_in6 dest_addr_ll;
bzero(&dest_addr_ll.sin6_addr.un, sizeof(dest_addr_ll.sin6_addr.un));
dest_addr_ll.sin6_family = AF_INET6;
dest_addr_ll.sin6_port = htons(PORT);
struct sockaddr_in6 source_addr_ll; // Large enough for both IPv4 or IPv6
#else
struct sockaddr_in dest_addr_ll;
dest_addr_ll.sin_addr.s_addr = htonl(INADDR_ANY);
dest_addr_ll.sin_family = AF_INET;
dest_addr_ll.sin_port = htons(PORT);
struct sockaddr_in source_addr_ll;
#endif
uint addr_len_ll = sizeof(source_addr_ll);
static fd_set fd_ll;
struct timeval tv_ll;
while(1){
if(ERR_OK != LL_task(initialise_ll)){
ESP_LOGE(TAG, "LL_task ERR!");
vTaskDelay(1000 / portTICK_PERIOD_MS);
continue;
}
#ifdef IPV6_LL
if(0 > (ptr_s_var_ll->s_conn_ll.listen_sock_ll = lwip_socket(AF_INET6, SOCK_STREAM, IPPROTO_IPV6))){
#else
if(0 > (ptr_s_var_ll->s_conn_ll.listen_sock_ll = lwip_socket(AF_INET, SOCK_STREAM, IPPROTO_IP))){
#endif
LL_task(deinitialise_ll);
ESP_LOGE(TAG, "Unable to create socket: errno %d", errno);
vTaskDelay(1000 / portTICK_PERIOD_MS);
continue;
}
if(0 != (ptr_s_var_ll->s_conn_ll.err_ll = lwip_bind(ptr_s_var_ll->s_conn_ll.listen_sock_ll, (struct sockaddr *)&dest_addr_ll, sizeof(dest_addr_ll)))){
LL_task(deinitialise_ll);
lwip_close(ptr_s_var_ll->s_conn_ll.listen_sock_ll);
ESP_LOGE(TAG, "Socket unable to bind: errno %d", errno);
vTaskDelay(3000 / portTICK_PERIOD_MS);
continue;
}
if(0 != (ptr_s_var_ll->s_conn_ll.err_ll = lwip_listen(ptr_s_var_ll->s_conn_ll.listen_sock_ll, 1))){
LL_task(deinitialise_ll);
lwip_close(ptr_s_var_ll->s_conn_ll.listen_sock_ll);
ESP_LOGE(TAG, "Error occurred during listen: errno %d", errno);
vTaskDelay(3000 / portTICK_PERIOD_MS);
continue;
}
while(1){
vTaskDelay(3000 / portTICK_PERIOD_MS);
if(0 > (ptr_s_var_ll->s_conn_ll.sock_ll = lwip_accept(ptr_s_var_ll->s_conn_ll.listen_sock_ll, (struct sockaddr *)&source_addr_ll, &addr_len_ll))){
lwip_close(ptr_s_var_ll->s_conn_ll.listen_sock_ll);
ESP_LOGE(TAG, "Unable to accept connection LL: errno %d", errno);
vTaskDelay(3000 / portTICK_PERIOD_MS);
continue;
}
do{
FD_ZERO(&fd_ll);
FD_SET(ptr_s_var_ll->s_conn_ll.sock_ll, &fd_ll);
tv_ll.tv_sec = 15;
lwip_setsockopt(ptr_s_var_ll->s_conn_ll.sock_ll, SOL_SOCKET, SO_RCVTIMEO, (struct timeval *)&tv_ll, sizeof(struct timeval));
ptr_s_var_ll->s_conn_ll.len_ll = lwip_recv(ptr_s_var_ll->s_conn_ll.sock_ll, ptr_s_var_ll->s_proc_ll.ptr_buff_ll, BUFF_SIZE_LL - 1, 0);
if(0 > ptr_s_var_ll->s_conn_ll.len_ll){
lwip_close(ptr_s_var_ll->s_conn_ll.sock_ll);
ESP_LOGW(TAG, "Recv timeout [errno %d]", errno);
break;
}
else if(0 == ptr_s_var_ll->s_conn_ll.len_ll){
lwip_close(ptr_s_var_ll->s_conn_ll.sock_ll);
ESP_LOGI(TAG, "Other side closed connection");
break;
}
if(ERR_OK != (ptr_s_var_ll->s_conn_ll.err_ll = Process_LL(ptr_s_var_ll->s_proc_ll.ptr_buff_ll))){
lwip_close(ptr_s_var_ll->s_conn_ll.sock_ll);
ESP_LOGI(TAG, "Error ProcesLL: %d", ptr_s_var_ll->s_conn_ll.err_ll);
break;
}
FD_ZERO(&fd_ll);
FD_SET(ptr_s_var_ll->s_conn_ll.sock_ll, &fd_ll);
tv_ll.tv_sec = 3;
lwip_setsockopt(ptr_s_var_ll->s_conn_ll.sock_ll, SOL_SOCKET, SO_SNDTIMEO,(struct timeval *)&tv_ll,sizeof(struct timeval));
if(0 > lwip_send(ptr_s_var_ll->s_conn_ll.sock_ll, ptr_s_var_ll->s_proc_ll.ptr_buff_ll, ptr_s_var_ll->s_conn_ll.len_ll, 0)){
lwip_close(ptr_s_var_ll->s_conn_ll.sock_ll);
ESP_LOGE(TAG, "Send timeout [errno %d]", errno);
break;
}
}while(1);
}
vTaskDelay(3000 / portTICK_PERIOD_MS);
}
vTaskDelete(NULL);
}
static err_t LL_task(e_init_ll init_ll)
{
err_t err_init = ERR_OK;
if(deinitialise_ll == init_ll)
{
lwip_close(ptr_s_var_ll->s_conn_ll.listen_sock_ll);
sys_delay_ms(1000);
lwip_close(ptr_s_var_ll->s_conn_ll.sock_ll);
sys_delay_ms(1000);
if(NULL != ptr_s_var_ll)
{
free(ptr_s_var_ll);
}
return err_init;
}
if(NULL == (ptr_s_var_ll = (s_variable_ll *)malloc(sizeof(s_variable_ll))))
{
return ERR_MEM;
}
return err_init;
}
void
InitSockLL(void *arg)
{
xTaskCreate(local_lan_socket, "local_lan_socket", 5*1024 + BUFF_SIZE_LL, arg, 5, &ll_Handle);
}