ok, maybe I posted my question a little early. I figured it out and it's
working fine. For the record, here is what I did:
1- Changed LWIP_SO_RCVTIMEO  to '1';
2- Since I want to "netconn_accept()" call to be blocking, I did this, where
pNetConnListener is a struct netconn*:

// Put a timeout of 0 to force a blocking accept.
pNetConnListener->recv_timeout = 0;
pNetConnListenerNewConn = netconn_accept(pNetConnListener);

3- Since I want a non-blocking "netconn_recv()", I did this:

// Check for incoming frames.
pNetConnListenerNewConn->recv_timeout = receiveTimeoutInMs;
pNetBuffer = netconn_recv(pNetConnListenerNewConn);
if (pNetBuffer != NULL)
{
    .......
}
else
{
    // Detect if there was a problem or it's because there was no data.
    if (pNetConnListenerNewConn->err == ERR_TIMEOUT)
    {
        // No data received. Since we should receive a keep alive packet
every x seconds,
        // this mean that the host has a problem or the connection has been
broken
        // (disconnected cable for example). Disconnect and prepare for next
connection.
        break;
    }
    else
    {
        // For any other errors, it's a problem. Disconnect and prepare for
next connection.
        //print_dbg("CommManager - ListenerTask Connection Problem.\n\r");
        break;
    }
}

My search of LWIP_SO_RCVTIMEO indicated that it's not used anywhere else
that needs attention (except for the netconn_accept()). So, now I can
disconnect and reconnect my cable at will!

Hope this helps some others!




On Fri, Oct 2, 2009 at 11:44 AM, Dany Thiffeault <[email protected]>wrote:

> Hey,
> I was testing the stability of my system, so I disconnected the Ethernet
> cable from my lwIP device and reconnected it. I found out that the
> connection wasn't re-initializing itself. I foudn out that my task is
> blocked in netconn_recv() indefinatly.
>
> I absolutly need to be able to detect a network fault and go back into
> connection accepting state. I searched around and found threads about this
> exact question, but the replies were all: swith to raw API.
>
> This is not good for me, since I'm using a multi-task system with RTOS,
> sequential API.
>
> My LWIP_SO_RCVTIMEO is 0 currently, and according to the code, it looks
> like I could put this to 1 and not block. But I just want to use it on the 
> netconn_recv()
> call, no others...
>
> Any advice here? Is it the way to go?
> Thanks!
>
_______________________________________________
lwip-users mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/lwip-users

Reply via email to