ソケット管理スレッドを立てることにしました。

struct tag {
SOCKET sock;
DWORD t;
};
struct tag foo;
構造体にソケットを含めておいてrecv()を呼び出す直前に
foo->t = timeGetTime();
にて時間を取得。

管理スレッドにてソケットが有効かつtimeGetTime() - foo->t > 10 * 1000
ならば障害が発生したとしてclosesocket(foo->sock)とする。

こんな感じで解決しました。
お騒がせいたしました。