关于recv返回值的奇怪有关问题!

关于recv返回值的奇怪问题!!
首先,我用的是.net(因为.net区人太少了。。)    

int     r=connect(sockfd,(struct     sockaddr     *)     &addr,     sizeof(addr));    
char     buff[1024];  
memset(buff,0,1024);    
recv(sockfd,buff,sizeof(buff),0);    
 
前面socket和connection测试均没有问题,WSAGetLastError()返回值也是0。    
这段代码在vc     6.0下运行通过    
在.net下面获得的recv返回值为0(If     the     connection     has     been     gracefully     closed,     the     return     value     is     zero),buff里面自然也是什么都没有的。。    
WSAGetLastError()也得不到错误。    
为什么会出现这种情况呢?我真是一点都没有头绪啊。。

------解决方案--------------------
返回0 是正常值,再次读取就可以了
返回-1才表示错误.
------解决方案--------------------
要循环接收,如果是不定长数据,先发一个尺寸先,再发数据
------解决方案--------------------
阻塞还是非阻塞?
非阻塞的话,返回0表示目前没数据到达