[En-Nut-Discussion] (no subject)
Michael Svob
michael.s at lfiinternational.com
Sat Nov 6 00:20:04 CET 2004
Hello,
I have an application where I am connecting to the Ethernut from a PC based
client using a TCP/IP socket connection (I used the 'tcps' sample code as my
"template"). Everything works fine, so long as I shut down the PC client
gracefully, which in turn sends a message to the Ethernut telling it to
terminate the session.
However, if I abruptly lose communication between the PC and the Ethernut
(e.g. PC crashes or reboots), then I cannot reconnect to the Ethernut
without resetting it. I added a "keep alive" mechanism, whereby if the
Ethernut thinks it's connected, it looks for a keep-alive message sent by
the client on a regular basis. If it fails to see this message for some
time, it attempts to tear down the connection on its side so it can wait for
a new socket request.
The problem is that in my ProcessRequests() function, fread() sits there and
happily blocks forever for data that never comes. I would have expected
that when the socket stream is closed (by my keep-alive watchdog thread),
that fread would return due either to a read error, or end-of-file.
However, this is not the case; fread() just waits indefinitely.
Is there a straightforward way to get fread() to return from blocking so
that program flow can continue? Is there a better way to not only detect
the loss of connection with the PC client, but more importantly close the
connection on the Ethernut side?
Thanks!!!
Michael Svob
LFI International
More information about the En-Nut-Discussion
mailing list