Hi,
I am using nrf9151-DK to send and receive data over UDP protocol. Firstly, I tried to use AT commands to send and receive meassages as described here, I had no isuues here. However when using socket API, I am no able to receive any data.
Project config:
# Networking CONFIG_NETWORKING=y CONFIG_NET_NATIVE=n CONFIG_NET_SOCKETS=y CONFIG_NET_SOCKETS_OFFLOAD=y CONFIG_POSIX_API=y # Modem library CONFIG_NRF_MODEM_LIB=y # LTE link control CONFIG_LTE_LINK_CONTROL=y #CONFIG_LTE_LC_PSM_MODULE=y CONFIG_LTE_LC_MODEM_SLEEP_MODULE=y CONFIG_LTE_LC_MODEM_SLEEP_NOTIFICATIONS=y # Logging CONFIG_SERIAL=y CONFIG_LOG=y CONFIG_FPU=y
Code:
int modem_send_hello(void) { const char *SERVER_HOSTNAME = "xxx.xxx.xxx.xxx"; const int SERVER_PORT = 65535; const char *message = "message"; int err; int sock; struct sockaddr_storage host_addr; char recv_buf[64]; struct sockaddr_in *server4 = ((struct sockaddr_in *)&host_addr); server4->sin_family = AF_INET; server4->sin_port = htons(SERVER_PORT); inet_pton(AF_INET, SERVER_HOSTNAME, &server4->sin_addr); sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); if (sock < 0) { LOG_ERR("Failed to create UDP socket, error: %d\n", errno); return -errno; } err = connect(sock, (struct sockaddr *)&host_addr, sizeof(struct sockaddr_in)); if (err < 0) { LOG_ERR("Failed to connect socket, error: %d\n", errno); close(sock); return err; } LOG_INF("Sending: %s", message); err = send(sock, message, sizeof(message) - 1, 0); if (err < 0) { LOG_ERR("Failed to transmit UDP packet, error: %d\n", errno); } err = recv(sock, recv_buf, sizeof(recv_buf) - 1, 0); if (err < 0) { LOG_ERR("Failed to receive UDP packet, error: %d\n", errno); } recv_buf[err] = 0; LOG_INF("Received: %s", recv_buf); close(sock); return 0; }
Code hangs on recv() function as it does not receive any data.