/* UDP server thread */ void *sixlowapp_udp_server_loop(void *arg) { (void) arg; sockaddr6_t sa; char buffer_main[UDP_BUFFER_SIZE]; uint32_t fromlen; int sock; fromlen = sizeof(sa); while (1) { while(!sixlowapp_netcat_listen_port) { thread_sleep(); } sock = socket_base_socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); memset(&sa, 0, sizeof(sa)); sa.sin6_family = AF_INET; sa.sin6_port = HTONS(sixlowapp_netcat_listen_port); if (-1 == socket_base_bind(sock, &sa, sizeof(sa))) { printf("Error bind failed!\n"); socket_base_close(sock); sixlowapp_netcat_listen_port = 0; continue; } printf("Listening for incoming UDP connection at port %" PRIu16 "\n", sixlowapp_netcat_listen_port); int32_t recsize = socket_base_recvfrom(sock, (void *)buffer_main, UDP_BUFFER_SIZE, 0, &sa, &fromlen); if (recsize < 0) { printf("ERROR: recsize < 0!\n"); } printf("UDP packet received, payload: %s\n", buffer_main); socket_base_close(sock); sixlowapp_netcat_listen_port = 0; } return NULL; }
static void *init_udp_server(void *arg) { (void) arg; sockaddr6_t sa; char buffer_main[UDP_BUFFER_SIZE]; int32_t recsize; uint32_t fromlen; int sock = socket_base_socket(PF_INET6, SOCK_DGRAM, IPPROTO_UDP); memset(&sa, 0, sizeof(sa)); sa.sin6_family = AF_INET; sa.sin6_port = HTONS(SERVER_PORT); fromlen = sizeof(sa); if (-1 == socket_base_bind(sock, &sa, sizeof(sa))) { printf("Error bind failed!\n"); socket_base_close(sock); return NULL; } while (1) { recsize = socket_base_recvfrom(sock, (void *)buffer_main, UDP_BUFFER_SIZE, 0, &sa, &fromlen); if (recsize < 0) { printf("ERROR: recsize < 0!\n"); } printf("UDP packet received, payload: %s\n", buffer_main); } socket_base_close(sock); return NULL; }