recv failed with errno 134 using nrf5340dk with W5500 shield

Hello,

I am currently working with the nRF5340DK and the W5500 shield. Both work perfectly when using the dhcpv4_client application. However, when I attempt to use the recv function after creating a socket, it fails and returns a length of -1, with an error code of 134 (not supported), and I’m unsure how to resolve the issue.

Here's my main.c : 

/* Networking DHCPv4 client */

/*
 * Copyright (c) 2017 ARM Ltd.
 * Copyright (c) 2016 Intel Corporation.
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <zephyr/logging/log.h>

#include <zephyr/kernel.h>
#include <zephyr/linker/sections.h>
#include <errno.h>
#include <stdio.h>

#include <zephyr/net/net_if.h>
#include <zephyr/net/net_pkt.h>
#include <zephyr/net/net_core.h>
#include <zephyr/net/net_mgmt.h>
#include <zephyr/logging/log.h>
#include <zephyr/net/socket.h>

#ifdef IS_ENABLED(CONFIG_NET_L2_ETHERNET))
#include <zephyr/net/net_if.h>
#endif

LOG_MODULE_REGISTER(eth_sniffer, 4);

void main(void)
{  
    struct net_if *iface;
	LOG_INF("Run dhcpv4 client");
	iface = net_if_get_default();
    net_if_set_promisc(iface);

    LOG_INF("Starting IP-level sniffer");

	int sock = socket(AF_INET, SOCK_RAW, IPPROTO_TCP);
	if (sock < 0) {
		LOG_ERR("Failed to create raw IP socket");
		return;
	}
    LOG_INF("Raw socket created successfully");

	struct sockaddr_in bind_addr = {
		.sin_family = AF_INET,
		.sin_port = htons(0),
		.sin_addr.s_addr = htonl(INADDR_ANY),
	};
    LOG_DBG("Binding raw socket to INADDR_ANY");
	if (bind(sock, (struct sockaddr *)&bind_addr, sizeof(bind_addr)) < 0) {
		LOG_ERR("Failed to bind raw socket");
		close(sock);
		return;
	}
    LOG_INF("Raw socket bound to INADDR_ANY");

	uint8_t buffer[512];
    while (1) {
		int len = recv(sock, buffer, sizeof(buffer), 0);
		if (len < 0) {
			LOG_ERR("recv failed , errno: %s", strerror(errno));
			continue;
		}

		printk("Received %d bytes:\n", len);
		for (int i = 0; i < len; i++) {
			printk("%02x ", buffer[i]);
		}
		printk("\n===============================\n");
	}
    
	
}
 

prj.conf : 

CONFIG_MAIN_STACK_SIZE=8192

# Networking config
CONFIG_NETWORKING=y
# w5500 driver config
CONFIG_SPI=y	    
CONFIG_GPIO=y
CONFIG_ETH_DRIVER=y
CONFIG_NET_L2_ETHERNET=y
CONFIG_ETH_W5500=y
CONFIG_ETH_W5500_TIMEOUT=1000
CONFIG_NET_IPV4=y
CONFIG_NET_IPV6=n
CONFIG_NET_TCP=y
CONFIG_NET_UDP=y
# CONFIG_NET_DHCPV4=y
# CONFIG_NET_DHCPV4_OPTION_CALLBACKS=y
CONFIG_INIT_STACKS=y

CONFIG_NET_SOCKETS=y
# CONFIG_POSIX_API=y
CONFIG_NEWLIB_LIBC=y
CONFIG_NET_MGMT=y
CONFIG_NET_MGMT_EVENT=y
CONFIG_NET_SOCKETS_POSIX_NAMES=y
CONFIG_NET_SOCKETS_OFFLOAD=y
# CONFIG_ETH_DRIVER_RAW_MODE=y
# CONFIG_IEEE802154_RAW_MODE=y

CONFIG_NET_PROMISCUOUS_MODE=y

CONFIG_NET_LOG=y
CONFIG_LOG=y
CONFIG_LOG_MODE_IMMEDIATE=y

CONFIG_SLIP_STATISTICS=n
CONFIG_NET_SHELL=y

# Network address config
CONFIG_NET_CONFIG_SETTINGS=y
CONFIG_NET_CONFIG_MY_IPV4_ADDR="192.168.1.2"
CONFIG_NET_CONFIG_MY_IPV4_NETMASK="255.255.255.0"

Related