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