gpt4 book ai didi

c - TransmitFile 是否适用于管道?

转载 作者:行者123 更新时间:2023-12-04 14:42:49 25 4
gpt4 key购买 nike

TransmitFile 的文档winsock 函数确实说"file"而不是“文件描述符”,所以答案是否定的?如果我不能使用 TransmitFile 通过套接字从管道发送数据,是否可以使用其他一些零复制技术?

最佳答案

要进行手动零拷贝传输,您需要以重叠模式打开套接字和文件,并将它们与 IO 完成端口相关联。然后您对文件发出读取,当文件读取完成时,您将已填充的缓冲区传递给套接字上的写入。然后,您可以通过调整套接字上的发送缓冲区大小来防止复制并在打开文件时选择正确的标志来调整它。

请注意,您可能应该使用后续套接字写入完成来驱动文件读取。也就是说,当旧的读取完成时不要继续发出新的读取,因为 TCP 堆栈可能会由于 TCP 窗口变满而最终进行流量控制,此时您将使用非分页池作为套接字写入需要越来越长的时间才能完成(有关详细信息,请参阅 here)。因此,确定每个连接允许的未完成套接字写入的数量,并在达到该数量时限制读取,即从读取完成时读取切换到写入完成时读取...

请注意,这不如使用 TransmitFile() 本身有效,因为它避免了内核到用户的转换,这些转换发生时会通知您读取完成并发出写入调用。

在回答您问题的第一部分时,如果您尝试会发生什么情况?

关于c - TransmitFile 是否适用于管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4676354/

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