+ while(event_receive_thread_running) {
+ recv_ret = recvfrom(server_fd, udp_buff, sizeof(udp_buff), 0, &client, &soc_len);
+ assert(recv_ret >= sizeof(mesh_event_payload_t));
+
+ // Push received mesh event data into the event_queue
+ mesh_event_payload_t *data = malloc(sizeof(mesh_event_payload_t));
+ assert(data);
+ memcpy(data, udp_buff, sizeof(mesh_event_payload_t));
+
+ // Also receive if there is any payload
+ if(data->payload_length) {
+ void *payload_data = malloc(data->payload_length);
+ assert(payload_data);
+ memcpy(payload_data, udp_buff + (int)sizeof(mesh_event_payload_t), data->payload_length);
+ data->payload = payload_data;
+ } else {
+ data->payload = NULL;
+ }
+
+ // Push the event into the event queue
+ assert(meshlink_queue_push(&event_queue, data));