为什么完成端口最后是这样判是否接收完毕的?

guolaikk 2011-01-10 11:07:21
都是以判断接收到的字符数为0看是否接收完毕的。不光是完成端口模型,重叠IO也是
例如这个示例代码的190行http://blog.csdn.net/wewaa/archive/2008/09/24/2973020.aspx


if (BytesTransferred == 0)
{
printf("Closing socket %d\n", PerHandleData->Socket);

if (closesocket(PerHandleData->Socket) == SOCKET_ERROR)
{
printf("closesocket() failed with error %d\n", WSAGetLastError());
return 0;
}
……

难道是我理解的不对?不是接收到的字节数为0的意思?
数据发送完毕后还会给对方发送一个数据部分为空的数据报?TCP不是字节流吗
...全文
150 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2011-01-11
  • 打赏
  • 举报
回复
if (BytesTransferred == 0) 表示对方主动关闭了连接.........
mayudong1 2011-01-11
  • 打赏
  • 举报
回复
我的理解吧
主动关闭方回发送一个FIN报文给对方,这个报文是只有首部没有数据,只是首部的某个字段设置成了FIN标志,说以接收方收到的数据长度就为0
Eleven 2011-01-11
  • 打赏
  • 举报
回复
If a socket handle associated with a completion port is closed, GetQueuedCompletionStatus returns ERROR_SUCCESS, with lpNumberOfBytes equal zero.
萧山夜雨 2011-01-11
  • 打赏
  • 举报
回复
这是判断C端正常关闭连接.不是接收完毕.
arong1234 2011-01-11
  • 打赏
  • 举报
回复
这不需要对方发一个空的数据包,只要对方告诉你我要关闭了(TCP的FIN报文),这边就会返回0,这个0时特殊标志,不是说从对方接收了什么[Quote=引用楼主 guolaikk 的回复:]
都是以判断接收到的字符数为0看是否接收完毕的。不光是完成端口模型,重叠IO也是
例如这个示例代码的190行http://blog.csdn.net/wewaa/archive/2008/09/24/2973020.aspx


C/C++ code

if (BytesTransferred == 0)
{
printf……
[/Quote]

18,357

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧