I want to receive data through UDP in eDRX
I tried to set up non-blocking UDP by reading this post, but I can't achieve the function yet. Any help?
https://devzone.nordicsemi.com/f/nordic-q-a/49918/non-blocking-udp-socket-fcntl-error-enotsock---argument-is-not-a-socket/199022#199022
I copied this ntp program and fixed it like this.
https://github.com/Rallare/fw-nrfconnect-nrf/blob/nrf9160_samples/samples/nrf9160/ntp/src/main.c
<main.c> #include <fcntl.h> . . void app_ntp_socket_start(void) { struct addrinfo *res; struct ntp_format ntp = { 0 }; socklen_t addrlen = sizeof(struct sockaddr_storage); ntp.flags = 0xe3; int err = getaddrinfo(NTP_HOST, NULL, NULL, &res); printk("getaddrinfo err: %d\n\r", err); ((struct sockaddr_in *)res->ai_addr)->sin_port = htons(NTP_PORT); struct sockaddr_in local_addr; local_addr.sin_family = AF_INET; local_addr.sin_port = htons(0); local_addr.sin_addr.s_addr = 0; int client_fd = socket(AF_INET, SOCK_DGRAM, 0); printk("client_fd: %d\n\r", client_fd); int flags = fcntl(client_fd, F_GETFL); printk("Flags = %d\n Errno = %d\n", flags, errno); fcntl(client_fd, F_SETFL, flags | O_NONBLOCK); printk("Flags = %d\n Errno = %d\n", flags, errno); err = bind(client_fd, (struct sockaddr *)&local_addr, sizeof(local_addr)); printk("bind err: %d\n\r", err); err = blocking_connect(client_fd, (struct sockaddr *)res->ai_addr, sizeof(struct sockaddr_in)); if (err < 0) { printk("connect err: %d\n\r", errno); } err = send(client_fd, &ntp, sizeof(struct ntp_format), 0); printk("sendto ret: %d\n\r", err); if (err < 0) { printk("sendto err: %d\n\r", errno); } err = blocking_recvfrom(client_fd, &ntp, sizeof(struct ntp_format), 0, (struct sockaddr *)res->ai_addr, &addrlen); if (err < 0) { printk("recvfrom err: %d\n\r", errno); } ntp_swap_endianess(&ntp); ntp_print(&ntp); freeaddrinfo(res); (void)close(client_fd); }
This is output
SPM: NS image at 0xc000 SPM: NS MSP at 0x20024578 SPM: NS reset vector at 0x130c5 SPM: prepare to jump to Non-Secure image. ***** Booting Zephyr OS v1.14.99-ncs2 ***** getaddrinfo err: 0 client_fd: 3 Flags = 0 Errno = 0 Flags = 0 Errno = 0 bind err: -1 connect err: 119 sendto ret: -1 sendto err: 119
firmware: v1.0.0
DK: v0.8.5
GNU Arm toolchain: 7-2018-q2-update