Simple Socket Library мона найти тута -> 
http://www.erols.com/astronaut/sslНиже реализация функции Stimeoutwait (кастрированный вариант)
Она возвращает EOF в случае определения разрыва соединения.
int Stimeoutwait(Socket *skt,long seconds,long useconds)
{
short          result;
int            ret;
fd_set         emask;
fd_set         rmask;
fd_set         wmask;
struct timeval timeout;
static char    buf[PM_BIGBUF];
/* sanity check */
if(!skt) {
   return -1;
   }
FD_ZERO(&rmask);
FD_SET(skt->skt,&rmask);
FD_ZERO(&wmask);
FD_ZERO(&emask);
/* test if something is available for reading on the socket.  This form
 * will block (sleep) until something arrives
 */
timeout.tv_sec = seconds;
timeout.tv_usec= useconds;
result= select(skt->skt+1, &rmask,&wmask,&emask, &timeout);
/* socket error */
if(result < 0) {
   return -1;
   }
/* timed out */
else if(result == 0) {
    return -2;
    }
if(FD_ISSET(skt->skt,&rmask)) {
   ret= recv(skt->skt,buf,PM_BIGBUF-1,MSG_PEEK);
   if(result == 1 && ret == 0) ret= EOF;
   if (ret == SOCKET_ERROR) ret= EOF;
   return ret;
   }
/* socket is empty */
return 0;
}