Pensavo stessi lavorando su Unix/Linux, mi spiace ma non conosco ancora abbstanza bene la parte di rete per Windows.
In ogni caso puoi simulare un comportamento simile con la funzione raise.
In questi caso devi usare un segnale tra questi:

codice:
SIGABRT
SIGFPE
SIGILL
SIGINT
SIGSEGV
SIGTERM
Prova con sigint e ricordati di registrare l'handler con la signal.
N.B.: Questa procedura è sconsigliatissima perché è tipica di Unix e non di Win, l'ideale sarebbe trovare una funzione timeout che sblocca le chiamate bloccanti dopo il tempo stabilito e che io non conosco.
Non ho mai provato a fare una cosa simile sotto windows e non sono nemmeno sicuro che funzioni.

In ogni caso

codice:
#include <signal.h>

int raise(
   int sig 
);

void (__cdecl *signal(
   int sig, 
   void (__cdecl *func ) (int [, int ] ))) 
   (int);
La signal riceve un intero (il segnale) ed un puntatore a funzione di tipo void func (int)