Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ WSARecv()能否立即返回数据?_C++_Sockets_Winapi_Network Programming_Iocp - Fatal编程技术网

C++ WSARecv()能否立即返回数据?

C++ WSARecv()能否立即返回数据?,c++,sockets,winapi,network-programming,iocp,C++,Sockets,Winapi,Network Programming,Iocp,调用WSARecv时,是否可能在不经过完成端口阶段的情况下立即返回数据。在WSARecv文档中,对于lpNumberOfBytesRecvd参数,它表示: 指向此调用接收的数据数(以字节为单位)的指针,如果 接收操作立即完成 是的,这并不罕见。请记住,数据以IP数据包的形式到达,其边界通常与读取不一致。如果您的WSARecv调用请求来自操作系统已保存的数据包的数据,则没有延迟的必要,Windows可能会立即返回该数据包。是,这并不罕见。请记住,数据以IP数据包的形式到达,其边界通常与读取不一致。

调用WSARecv时,是否可能在不经过完成端口阶段的情况下立即返回数据。在WSARecv文档中,对于lpNumberOfBytesRecvd参数,它表示:

指向此调用接收的数据数(以字节为单位)的指针,如果 接收操作立即完成


是的,这并不罕见。请记住,数据以IP数据包的形式到达,其边界通常与读取不一致。如果您的WSARecv调用请求来自操作系统已保存的数据包的数据,则没有延迟的必要,Windows可能会立即返回该数据包。

是,这并不罕见。请记住,数据以IP数据包的形式到达,其边界通常与读取不一致。如果您的WSARecv调用从操作系统已保存的数据包中请求数据,则没有延迟的必要,Windows可能会立即返回该数据包。

当重叠的WSARecv完成且IO_挂起或成功时,完成数据包将排入IOCP队列,请参阅

在Vista或更高版本中,您可以通过调用套接字并在成功注释上传递文件\u跳过\u完成\u端口\u来更改此设置。您可以在文档中将文件读取为套接字,文件句柄的概念直接转换为套接字

如果您确实启用了完成端口跳过,那么当WSARecv立即返回数据(即成功返回而不是IO_挂起返回)时,您必须在WSARecv调用站点直接处理它,因为您将不会获得完成数据包

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

当重叠的WSARecv完成且IO_挂起或成功时,完成数据包将排队到IOCP请参阅

在Vista或更高版本中,您可以通过调用套接字并在成功注释上传递文件\u跳过\u完成\u端口\u来更改此设置。您可以在文档中将文件读取为套接字,文件句柄的概念直接转换为套接字

如果您确实启用了完成端口跳过,那么当WSARecv立即返回数据(即成功返回而不是IO_挂起返回)时,您必须在WSARecv调用站点直接处理它,因为您将不会获得完成数据包


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

但是,事件仍在队列中,如果不想立即完成,则无需编写特殊路径代码to@mnunberg你的意思是,即使数据被立即读取,完成数据包仍然会被放置在完成端口中?是的。让我来找出这方面的参考资料。。。事实上,我不再确定了。文档提示其中一个或另一个是互斥的,即如果lpOVERLAPPED不为NULL,则dwNBytes应该为NULL,但我不确定该文档的正确性。它似乎在这里起作用。看看是什么让你这么想的?它与套接字非常相关,在减少不必要的上下文切换方面非常有效。我已经使用它很多年了。但是,事件仍然在队列中,如果不想立即完成,您不必编写特殊的路径代码to@mnunberg你的意思是,即使数据被立即读取,完成数据包仍然会被放置在完成端口中?是的。让我来找出这方面的参考资料。。。事实上,我不再确定了。文档提示其中一个或另一个是互斥的,即如果lpOVERLAPPED不为NULL,则dwNBytes应该为NULL,但我不确定该文档的正确性。它似乎在这里起作用。看看是什么让你这么想的?它与套接字非常相关,在减少不必要的上下文切换方面非常有效。我已经用了很多年了。