关于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表示目前没数据到达
首先,我用的是.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表示目前没数据到达