怎样判断GetQueuedCompletionStatus是接受完毕还是发送完毕

qin_wei 2005-04-11 10:26:20
GetQueuedCompletionStatus返回的lpNumberOfBytes怎样才能确定是接受到的字节数还是发送出去的字节数?
比如我调用wsarecv(。。。)一直在iopending中,但同时因需要又wsasend(。。。)发送了一个包,
这时候GetQueuedCompletionStatus返回后我该怎么确定是接收到的数据还是发送出去的数据?
或者CompletionKey是我定义的一个结构
struct a
{
int ioflag;
};
这个ioflag的标志该如何设置啊,我是发送的同时也在接收啊。
...全文
189 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
DentistryDoctor 2005-04-11
  • 打赏
  • 举报
回复
建议阅读Windows网络编程,在网上可以找到第二版的电子书
nuaawenlin 2005-04-11
  • 打赏
  • 举报
回复
可以通过判断发生事件的重叠结构是WSASend的,还是WSARecv的
flashboy 2005-04-11
  • 打赏
  • 举报
回复
一般的情况是每进行一次重叠调用,就开辟一个新的OVERLAPPED结构,这样就可以分开了。
qin_wei 2005-04-11
  • 打赏
  • 举报
回复
哪位大哥帮忙解释一下
qin_wei 2005-04-11
  • 打赏
  • 举报
回复
结贴了,虽然弄明白了,但觉得这种方法在不同的api间传递自定义的指针不是很安全,
谁能保证windows的内核处理不变呢,这样的调用毕竟和某些api用到的application data参数不太一样
nuaawenlin 2005-04-11
  • 打赏
  • 举报
回复
不会有问题的,你的投递的自定义重叠结构的信息追加在lpNumberOfBytesTransferred后面。
只要你还是使用你自定义的结构指针指向它就可以了。
qin_wei 2005-04-11
  • 打赏
  • 举报
回复
是兄弟的拉一把~
qin_wei 2005-04-11
  • 打赏
  • 举报
回复
又找了几段代码看了看,好像明白些了
在wsarecv和wsasend调用时候传递进去的是overlaped参数传进去的是自定义的结构a,a可以设置读写标记,
a的首地址应该是个overlaped结构,这样在GetQueuedCompletionStatus时候将返回给你的overlaped指针
进行强制转换就可以了,我说的对吗?
但这样会不会有什么问题呢?比如传给wsarecv的结构被wsarecv收到后当做一个overlaped结构创建实例,只拷贝了开头的信息,那么再在GetQueuedCompletionStatus时候返回给你的只是一个基本的overlaped指针
,这样的话对它的访问不是违例了吗?
qin_wei 2005-04-11
  • 打赏
  • 举报
回复

to: nuaawenlin(飘人)
可以通过判断发生事件的重叠结构是WSASend的,还是WSARecv的

BOOL GetOverlappedResult(
HANDLE hFile, // handle to file, pipe, or device
LPOVERLAPPED lpOverlapped, // overlapped structure
LPDWORD lpNumberOfBytesTransferred, // bytes transferred
BOOL bWait // wait option
);

是用这个函数判断吗??
那么lpNumberOfBytesTransferred能说明是发送还是接收呢?

18,363

社区成员

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

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