gpt4 book ai didi

c++ - 我可以重复调用 WSASend() 吗?

转载 作者:行者123 更新时间:2023-11-30 01:49:40 26 4
gpt4 key购买 nike

当使用 IOCP 时,如果我调用 WSASend(),我是否必须等待通知到达才能再次调用它,或者我可以多次调用它才能收到任何通知,例如,是否允许这样的事情:

WSASend();

// Call it again without waiting for notification of previous call
WSASend();

// Call it again without waiting for notification of previous call
WSASend();

最佳答案

是的,您可以发出多个 I/O 请求而无需等待完成通知。或者,您可以一次调用 WSASend() 多个缓冲区。

无论哪种方式,或两者都可以正常工作。每个调用的 OVERLAPPED block 本质上是 I/O 请求链表的指针,因此当 I/O 资源可用时,它们都可以排队并由内核和通信堆栈执行。

这也适用于 WSARecv 等重叠 I/O。这允许内核/堆栈在用户线程代码处理之前通知的缓冲区时加载缓冲区。

注意:OVERLAPPED block 和缓冲区在每次调用时必须是唯一的,并且它们的生命周期必须延长到完成通知。在用户线程处理完成通知之前,您不能让它们被 RAII'd 或 delete'd 掉。缓冲区和 OVERLAPPED 通常是一个“IOrequest”类的成员(使用“SocketContext*”类指针成员将每个 IOrequest 与其绑定(bind)的套接字连接起来)。

关于c++ - 我可以重复调用 WSASend() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com