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