struct timeval tv;
tv.tv_sec=0;
tv.tv_usec=500000;
if(setsockopt(sock,SOL_SOCKET,SO_RCVTIMEO,&tv, sizeof(tv)))
{
"все плохо".
Дальше, по каждому чиху, если что-то не так, сразу делаю
retval = recv(sock,&req,sizeof(req),0);
if(retval != sizeof(req))
{
close(sock);
fprintf(stderr,"Goodbye from client retval");
pthread_exit( NULL );
}