完成端口问题,为什么每次接收到数据以后dwIoError的值都是 997

88dd 2003-01-09 07:37:44

DWORD dwIoSize;
ULONG ulFlags = 0;//MSG_PARTIAL;
UINT nRetVal;
nRetVal = WSARecv(this->m_hSocket,
&this->m_wsaInBuffer,
1,
&dwIoSize,
&ulFlags,
&this->m_Ov,
NULL);
...



LPOVERLAPPED pOv;
while(bRunning)
{
try
{
bIORet = GetQueuedCompletionStatus(
hCompletionPort,
&dwIoSize,
(LPDWORD) &dwIOCompletionKey,
&pOv, INFINITE);
dwIoError = GetLastError();
pClient = CONTAINING_RECORD(pOv, CClient, m_Ov);
...

为什么dwIoError 总是 997( WSA_IO_PENDING )
...全文
109 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
speakboy 2003-01-29
  • 打赏
  • 举报
回复
997是正常的呀!
barsteng 2003-01-28
  • 打赏
  • 举报
回复
呵呵,同上,997是IO_PENDING,没有问题的,你应该这样:在WSARecv的时候判断GetlastError,如果不是997,就出错了。
还有,客户端掉线的时候应该是IOSize为0,
判断是否全部发送完数据的时候应该针对每个socket保存一个iSend,每次都将IoSize加到iSend上。因为完成端口的方式是异步方式,所以有可能发送了1个字节就通知你一下,也有可能全部发送完了才通知你。
DoubleJiang 2003-01-28
  • 打赏
  • 举报
回复
up
yanhuahui 2003-01-28
  • 打赏
  • 举报
回复
就是需要这个....正常,没这个你怎么通信呢?
znboy 2003-01-27
  • 打赏
  • 举报
回复
这是正常的
bqt 2003-01-24
  • 打赏
  • 举报
回复
997 == ERROR_IO_PENDING,重叠I/O正在进行。
不用管它!
88dd 2003-01-09
  • 打赏
  • 举报
回复
是的,目前没有发现数据丢失的现象。

可我不知道当dwIoError是997的时候是否己收到完整的数据

还有当客户端掉线时dwIoError也是997,不知道有什么好办法可以处理。
guonix 2003-01-09
  • 打赏
  • 举报
回复
997应该是正常的,每次发送数据包后都会出现这个错误信息,对程序没有任何影响。

18,356

社区成员

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

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