Yo una vez lo hice con select(), creo que verificaba si el socket estaba listo para recibir datos y recibía con recv() si daba SOCKET_ERROR quería decir que se había perdido la conexión. De todas maneras no estoy 100% seguro de que funcionaba así pero por ahí va la cosa.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms740141(v=vs.85).aspxSi no te quieres complicar tanto, envía un mensaje cada X segundos y verifica el valor de retorno de send() si este es SOCKET_ERROR la conexión está cerrada.