Итак, в документации сказано:
http://msdn.microsoft.com/zh-cn/library/ct7d990b(v=VS.80).aspx
"Receive возвращает количество полученных байтов. Если соединение было закрыто, возвращается 0."
Учитывая тот факт, что функция не блокирует, что, если просто нет данных?
Как можно определить, вернул ли он 0, потому что нет данных или потому что он отключен?