LwIP websrv async communication
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello,
Using the IMXRT1062, with SDK v2.9.1. It contains a websocket example via LwIP (lwip_httpsrv_freertos). In this example, data is send to the connected socket via the WS_Send function.
The parameter for the WS_Send function is WS_USER_CONTEXT_STRUCT:
/*
* WebSocket data structure
*/
typedef struct ws_data_struct
{
/* Pointer to user data. */
uint8_t *data_ptr;
/* Length of user data. */
uint32_t length;
/* Type of data. */
WS_DATA_TYPE type;
} WS_DATA_STRUCT;
/*
* Structure passed as parameter to user callbacks
*/
typedef struct ws_user_context_struct
{
/* WebSocket handle. */
uint32_t handle;
/* Error code if error occurs. */
WS_ERROR_CODE error;
/* Data structure. */
WS_DATA_STRUCT data;
/* Flag signalizing end of message. */
uint32_t fin_flag;
} WS_USER_CONTEXT_STRUCT;
The data is passed via data_ptr, and send to the socket task via sys_mbox_post.
Now my question:
How do you know that the data you pointed to in data_ptr has been send?
Since the WS_send function returns before the data has been send, how do I know when the data pointed to via data_ptr can be invalidated?
Do I put the data on the stack?
uint8_t data_to_send[2] = {..};
WS_USER_CONTEXT_STRUCT c;
c.data.data_ptr = data_to_send;
WS_send(&c);
Do I malloc it?
Or I'm I missing a point here?
Clearly, I need to manage the data correctly to make sure that the websocket is not using an old pointer to transmit data.
Thanks for you feedback,
Jonathan.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Jonathan,
The error checking is done through callbacks, the one that you need is ws_echo_error. For this callback to work properly, you will need to activate the DEBUG_WS macro.
Regards,
Victor