On Sat, Aug 1, 2026 at 6:12 AM Mina Almasry <[email protected]> wrote:
>
Hi

> In testing environments, binding to the port can transiently fail
> following a driver reset caused by the preceding queue configuration.
> The failing bind() is typically caused by DHCP/IPv6 DAD needing some
> time to resolve and assign the IP address back to the interface after
> the reset.

With EADDRNOTAVAIL? Maybe loop only for that errno?

> Retry bind() multiple times before fully failing the test
> to improve robustness.
>
> Signed-off-by: Mina Almasry <[email protected]>
> ---
>  tools/testing/selftests/drivers/net/hw/ncdevmem.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
>
> diff --git a/tools/testing/selftests/drivers/net/hw/ncdevmem.c 
> b/tools/testing/selftests/drivers/net/hw/ncdevmem.c
> index ffe1d5c1fa4e1..6724f81e389fa 100644
> --- a/tools/testing/selftests/drivers/net/hw/ncdevmem.c
> +++ b/tools/testing/selftests/drivers/net/hw/ncdevmem.c
> @@ -898,7 +898,12 @@ static int do_server(struct memory_buffer *mem)
>         fprintf(stderr, "binding to address %s:%d\n", server_ip,
>                 ntohs(server_sin.sin6_port));
>
> -       ret = bind(socket_fd, &server_sin, sizeof(server_sin));
> +       int retries = 10;
> +       while (retries--) {
> +               ret = bind(socket_fd, &server_sin, sizeof(server_sin));
> +               if (!ret) break;
> +               sleep(1);
> +       }
>         if (ret) {
>                 pr_err("Failed to bind");
>                 goto err_close_socket;
> --
> 2.55.0.571.g244d577d93-goog
>

Reply via email to