Socket send() not return error when packet not transmitted

Testing UDP sample with sdk 1.7.0 I can't detect errors if the packet is not sent.

After a connection to networks and a few well-delivered packets, I put the device in a shield room with no network coverage. The send() function continues to return the number of characters sent normally even if no packet is actually received.

I expect the modem to detect transmission errors, but send() doesn't seem to be able to forward them.

How can I detect the transmission error?

static void server_transmission_work_fn(struct k_work *work)
{
	int err;
	char buffer[CONFIG_UDP_DATA_UPLOAD_SIZE_BYTES] = {"\0"};

	printk("Transmitting UDP/IP payload of %d bytes to the ",
	       CONFIG_UDP_DATA_UPLOAD_SIZE_BYTES + UDP_IP_HEADER_SIZE);
	printk("IP address %s, port number %d\n",
	       CONFIG_UDP_SERVER_ADDRESS_STATIC,
	       CONFIG_UDP_SERVER_PORT);

	err = send(client_fd, buffer, sizeof(buffer), 0);
	if (err < 0) {
		printk("Failed to transmit UDP packet, %d\n", errno);
		return;
	}

	k_work_schedule(&server_transmission_work,
			K_SECONDS(CONFIG_UDP_DATA_UPLOAD_FREQUENCY_SECONDS));
}

Parents Reply Children
No Data
Related