]> git.feebdaed.xyz Git - 0xmirror/SOEM.git/commitdiff
Restore linux nicdrv recv non-blocking behaviour
authorHans-Erik Floryd <hans-erik.floryd@rt-labs.com>
Mon, 2 Jun 2025 12:58:39 +0000 (14:58 +0200)
committerHans-Erik Floryd <hans-erik.floryd@rt-labs.com>
Wed, 9 Jul 2025 15:20:48 +0000 (17:20 +0200)
In commit [091a465], socket send/recv timeouts were temporarily
disabled. Restore non-blocking behaviour on recv by calling recv with
MSG_DONTWAIT.

Closes #451.

Change-Id: Ia5966ad55deec4d9364838f4ea4880fce37273fa

oshw/linux/nicdrv.c

index 7d7b2f57996ece5f27760ed1d27f944a0d2d7dde..190d9033069d523f6be49df300cc9826ae6dad81 100644 (file)
@@ -93,7 +93,6 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
 {
    int i;
    int r, rval, ifindex;
-   //  struct timeval timeout;
    struct ifreq ifr;
    struct sockaddr_ll sll;
    int *psock;
@@ -150,12 +149,6 @@ int ecx_setupnic(ecx_portt *port, const char *ifname, int secondary)
       return 0;
 
    r = 0;
-   /*
-      timeout.tv_sec =  0;
-      timeout.tv_usec = 1;
-      r |= setsockopt(*psock, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
-      r |= setsockopt(*psock, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
-   */
    i = 1;
    r |= setsockopt(*psock, SOL_SOCKET, SO_DONTROUTE, &i, sizeof(i));
    /* connect socket to NIC by name */
@@ -355,7 +348,7 @@ static int ecx_recvpkt(ecx_portt *port, int stacknumber)
       stack = &(port->redport->stack);
    }
    lp = sizeof(port->tempinbuf);
-   bytesrx = recv(*stack->sock, (*stack->tempbuf), lp, 0);
+   bytesrx = recv(*stack->sock, (*stack->tempbuf), lp, MSG_DONTWAIT);
    port->tempinbufs = bytesrx;
 
    return (bytesrx > 0);