0
问题:
在完成端口中,在向某个socket发送数据时,调用wsasend函数,假设我本次要发送的是1024字节的数据,调用wsasend返回实际发送的
字节数是小于1024时,是在立即在这里继续调用wsasend函数继续发送,还是在GetQueuedCompletionStatus函数里面来继
续发送?因为我要发送的数据,都是在重叠结构里,这里流程我还不是很清楚,望兄弟们解释一下
回复:
1.首先,在重叠IO中,你说的问题应该不存在.
WSASend发送后,要么数据都发送出去了.要么就返回WSA_IO_PENGING错误.
2.如果你还是担心的话.那么你说的两个地方都可以发送
但每发送一次,都要用不同的缓存区,并把没发送完的数据copy到新的缓存区,再发送
(在实际应用中,就是取一个新的PER_IO_DATA,也就是你说的包含WSAOVERLAPPED的那个数据结构)
补充:第二点非常重要,就是每发送一次,都需要使用不同的缓冲区,对于开发中,就是要新的Overlap结构,里面包含了一个HEvent句柄。
在完成端口中,在向某个socket发送数据时,调用wsasend函数,假设我本次要发送的是1024字节的数据,调用wsasend返回实际发送的
字节数是小于1024时,是在立即在这里继续调用wsasend函数继续发送,还是在GetQueuedCompletionStatus函数里面来继
续发送?因为我要发送的数据,都是在重叠结构里,这里流程我还不是很清楚,望兄弟们解释一下
回复:
1.首先,在重叠IO中,你说的问题应该不存在.
WSASend发送后,要么数据都发送出去了.要么就返回WSA_IO_PENGING错误.
2.如果你还是担心的话.那么你说的两个地方都可以发送
但每发送一次,都要用不同的缓存区,并把没发送完的数据copy到新的缓存区,再发送
(在实际应用中,就是取一个新的PER_IO_DATA,也就是你说的包含WSAOVERLAPPED的那个数据结构)
补充:第二点非常重要,就是每发送一次,都需要使用不同的缓冲区,对于开发中,就是要新的Overlap结构,里面包含了一个HEvent句柄。
我的团队
[zh]在 windows IOCP 中,如何等待异步 IO 操作完成(包括被取消) 选项


2008/05/15
13:53
2422



