Во-первых, m_cWorkSocket — какого класса? Стандартный какой-то или Вы сами писали? И, собственно, где закрывается поток, в котором обрабатываются recv и send для данного сокета? Видимо, здесь: m_cWorkSocket->Close()? А как он закрывается?
Во-вторых, там внутри CancelBlockingCall(), часом, нет вызова WSACancelBlockingCall()? А то согласно MSDN последняя функция является устаревшей и нерекомендована к использованию.
Кстати, а как Вы закрывали напрямую из другого потока?