Hey all you winsock fans! (my cherry post!)

Ive been working on a chat server/client and am having
a problem with remote termination of a client crashing the server
Everything works fine if the remote user uses the designed
means by which to exit the prog. but if their ISP kicks it then
it crashes my server. As the winsock control for the the terminated
client is still active on the server,the server will
still try to echo back to the disconnected client. I would like to
know the most efficient way to verify connectivity and/or take
the appropriate action when it ceases.

ie. Will the 'if winsock=sckclosed' actually determine if a sudden
remote termination has taken place, like an remote system crash?

or should i 'ping' the client with a packet of data bound to a timer,
wait for a nonresponse and take the appropriate client closure
action during the error event?

im looking for the most comprehensive and most efficient answer
involving the least amount network congestion that will
allow for the continuous, fluid function of the server/host.