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;
}