lwip-users
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[lwip-users] UDP server on LwIP socket falls into hard fault if input st


From: Иван
Subject: [lwip-users] UDP server on LwIP socket falls into hard fault if input string longer than 19 bytes
Date: Tue, 07 Jun 2016 12:12:36 +0300

Hello, people.
I need help in solving very annoying problem, which I cannot track. Here is my 
question on stackoverflow.com

All works fine with short messages. But 20 bites and more knocks out uC into 
hard fault. I think it because of NULL pointer exception. My embedded system 
consists of STM32F4, FreeRTOS and LwIP. Core was taken from ST example. Here is 
the code of thread of simple UDP server.

 #include <string.h>
 #include <stdbool.h>
 #include <stdlib.h>
 #include "lwip/sockets.h"
 #include "./udpCLI.h"
 //#include "Sledge.h" //for assert_amsg(), which print what and where fails 
before stop execution

 static void udpCLI_thread(void *arg)
 {
     int sockfd; // socket file descriptor
     const uint16_t serverport = UDP_PORT_NUMBER_CLI;
     struct sockaddr_in serveraddr = {0}, clientaddr = {0};
     socklen_t addrlen;// = sizeof(struct sockaddr_in);
     const uint16_t bufin_SIZE = 200, bufout_SIZE = 1024;
     char *bufin  = malloc(bufin_SIZE);  assert_amsg(bufin != NULL);  // stops 
execution with printing message "bufin != NULL" in stdout/stderr
     char *bufout = malloc(bufout_SIZE); assert_amsg(bufout != NULL);

     LWIP_UNUSED_ARG(arg);  //(void)arg;

     debugf2( "udpCLI_thread"NEWLINE );

     sockfd = socket(AF_INET, SOCK_DGRAM, 0);
     assert_msg("udpCLI_thread: ERROR opening socket", sockfd>=0);

     /*
      * build the server's Internet address
      */
     serveraddr.sin_family = AF_INET;
     serveraddr.sin_addr.s_addr = htonl(INADDR_ANY);
     serveraddr.sin_port = htons(serverport);

     /*
      * bind: associate the socket with a port
      */
     if( bind(sockfd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0 )
         error("udpCLI_thread: ERROR on binding");

     // main loop: wait for a datagram, then echo it
     while(1)
     {
         addrlen = sizeof(struct sockaddr_in);  // THIS DID NOT HELP
         // recvfrom: receive a UDP datagram from a client
         int n = recvfrom(sockfd, bufin, bufin_SIZE, /*flags*/0, (struct 
sockaddr*)&clientaddr, &addrlen);
         // handle rusult
         //if (n < 0)
         // future process and response
         //....
 }
 }

Program control never returns from recvfrom() function if input message length 
is more than 19 bytes. And never returns from function 
sys_arch_mbox_fetch(&conn->recvmbox, &buf, 0); in function netconn_recv_data() 
in file api_lib.c at line 371.

The same thing met for another example code.
Please help to resolve this problem.

This message has no MIME, only plain text.
--
Ivan Kuvaldin



reply via email to

[Prev in Thread] Current Thread [Next in Thread]