如何取消或者结束服务器端已经投递的WSARecv投递?

亚细亚 2019-05-20 04:24:01
socket上投递了WSARecv,那么如何取消该投递或者结束该投递?也就是说:如果客户端不发送数据的话,是否可以在服务器端怎么处理一下,让WSARecv接收到一个数据包,从而结束该投递;
...全文
298 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2019-07-09
  • 打赏
  • 举报
回复
查下这个overlap指针在数据处理中有没有 做移动或者其他操作
赵4老师 2019-06-21
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
亚细亚 2019-06-21
  • 打赏
  • 举报
回复
closesocket(s)
free(overlap)
提示:

如果不释放overlap,那么就不会出错。可是overlap必须要释放,这问题如何解决?
亚细亚 2019-05-28
  • 打赏
  • 举报
回复
引用 9 楼 Eleven 的回复:
你是怎么分配给WSARecve的OL结构?

用calloc分配的空间:
(WSAOVERLAPPED *)calloc(1, sizeof(WSAOVERLAPPED));
Eleven 2019-05-27
  • 打赏
  • 举报
回复
你是怎么分配给WSARecve的OL结构?
亚细亚 2019-05-24
  • 打赏
  • 举报
回复
执行closesocket(s)后,接着free(ovl)[这个ovl就是WSARecv中的一个参数]。接着就出现错误提示:堆损坏。
天外怪魔 2019-05-23
  • 打赏
  • 举报
回复
IOCP现在缺少权威点的文档,谁有麻烦分享下链接。
zgl7903 2019-05-23
  • 打赏
  • 举报
回复
引用 2 楼 亚细亚 的回复:
[quote=引用 1 楼 zgl7903 的回复:] 用异步模式 或者 closesote
WSARecv就是采用的异步模式,closesote是什么意思?[/quote] 误写 closesocket
引用 6 楼 天外怪魔 的回复:
IOCP现在缺少权威点的文档,谁有麻烦分享下链接。
I/O Completion Ports
smwhotjay 2019-05-22
  • 打赏
  • 举报
回复
引用 3 楼 亚细亚 的回复:
网上有些资料说只要closesocket(s),那么已经投递的WSARecv就会自动释放,但是在ICOP中测试根本就不可能。
closesocket会导致已经投递的WSARecv完成。GetQueuedCompletionStatus会得到这个完成状态,就可以删除对应的OVERLAPPED内存了
worldy 2019-05-22
  • 打赏
  • 举报
回复
closesock 会发出最后的 一个完成消息给完成端口的线程函数
亚细亚 2019-05-22
  • 打赏
  • 举报
回复
网上有些资料说只要closesocket(s),那么已经投递的WSARecv就会自动释放,但是在ICOP中测试根本就不可能。
亚细亚 2019-05-22
  • 打赏
  • 举报
回复
引用 1 楼 zgl7903 的回复:
用异步模式 或者 closesote

WSARecv就是采用的异步模式,closesote是什么意思?
zgl7903 2019-05-22
  • 打赏
  • 举报
回复
用异步模式 或者 closesote

18,358

社区成员

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

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