c++ WSA_IO_PENGDING

^8^ 2014-08-18 05:31:18
1.循环向设备发送命令(A发送给B),一问一答的机制,当A发送的命令有错时候,B自然就没有应答,A这边WSARecv()时候肯定接收不到数据,WSAGetLastError()返回WSA_IO_PENDING 一直挂着,没有完成,那这样的话,接着发送正确的命令,也收不到数据了。如何处理WSA_IO_PENDING
...全文
202 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
一定要有超时处理
^8^ 2014-08-19
  • 打赏
  • 举报
回复
引用 5 楼 VisualEleven 的回复:
我觉得正确的是不管A的命名是否有错误,B都应该应答,B没有应答只有一个情况,那就是网络异常了。
正常应该是这种模式。关键是硬件设备的协议就是这样,太垃圾了。对于它不识别的命令也没有应答包。
Eleven 2014-08-19
  • 打赏
  • 举报
回复
我觉得正确的是不管A的命名是否有错误,B都应该应答,B没有应答只有一个情况,那就是网络异常了。
Eleven 2014-08-19
  • 打赏
  • 举报
回复
当A发送的命令有错时候,B自然就没有应答 -------------------------------------------------------------- ? 如何知道A发送的命令有错?B没有应答就表示A发送的命令有错?如果网络异常了,B自然也没有应答~你又如何区分?
^8^ 2014-08-19
  • 打赏
  • 举报
回复
我的问题是:(如果A向B发送错误的命令,B自然无应答包,你去接收数据的话自然没有)这边就是要针对异常状况的处理。 出现WSA_IO_PENDING的时候,如何处理掉这种状况,因为接下来还得循环 WSASend(),WSARecv()。 或者说在调用WSARecv()前判定下,端口缓冲区是否有数据再去接收。
mayudong1 2014-08-18
  • 打赏
  • 举报
回复
我觉得之后也收不到数据应该因为B那边的处理出了问题,第一次收到个错误的数据,之后就恢复不过来了,否则A不会收不到数据的
xian_wwq 2014-08-18
  • 打赏
  • 举报
回复
IOCP投递的时候,WSA_IO_PENDING这个是正常状态,表示系统没有完成异步操作

18,356

社区成员

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

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