gpt4 book ai didi

c++ - WSARecv() 可以立即返回数据吗?

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

调用WSARecv()时,有没有可能不经过完成端口阶段,直接返回数据。在 WSARecv() 文档中,它针对 lpNumberOfBytesRecvd 参数说:

A pointer to the number, in bytes, of data received by this call if the receive operation completes immediately.

最佳答案

当一个重叠的 WSARecv()IO_PENDINGSUCCESS 完成时,一个完成数据包被排队到 IOCP 参见 this MSDN article for details .

对于 Vista 或更高版本,您可以通过调用 SetFileCompletionNotificationModes() 来更改此设置。对于套接字并传递 FILE_SKIP_COMPLETION_PORT_ON_SUCCESS(请注意,您可以在文档中阅读 File as Socket,文件句柄的概念直接转换为套接字)。

如果您确实启用完成端口跳过,那么当 WSARecv() 立即返回数据时(即 SUCCESS 返回而不是 IO_PENDING return) 那么你必须在 WSARecv() 调用点直接处理它,因为你不会得到一个完成数据包。

请注意,启用“跳过完成端口”处理对于减少上下文切换非常有用,但您现在需要直接或在正常的完成处理程序中处理完成。

关于c++ - WSARecv() 可以立即返回数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28694559/

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