完成端口问题,为什么每次接收到数据以后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 )
...全文
87 8 打赏 收藏 举报
写回复
8 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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应该是正常的,每次发送数据包后都会出现这个错误信息,对程序没有任何影响。
  • 打赏
  • 举报
回复
相关推荐
发帖
网络编程

1.8w+

社区成员

VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
帖子事件
创建了帖子
2003-01-09 07:37
社区公告
暂无公告