TransmitFile winsock函數的文檔確實說「文件」而不是「文件描述符」,所以答案可能不是?如果我不能使用TransmitFile通過套接字從管道發送數據,是否還有其他零拷貝技術可以使用?TransmitFile是否在管道上工作?
2
A
回答
3
要進行手動零拷貝傳輸,您需要以重疊模式打開套接字和文件,並將它們與IO完成端口相關聯。然後,您對該文件執行讀操作,當文件讀取完成時,將填充的緩衝區傳遞給套接字上的寫操作。然後,您可以通過調整套接字上的發送緩衝區大小來調整此設置,以防止複製並在打開文件時選擇正確的標誌。
請注意,您應該使用後續的套接字寫入完成來驅動您的文件讀取。也就是說,當舊堆棧完成時,不要繼續發出新讀,因爲TCP堆棧可能最終會由於TCP窗口變滿而進行流量控制,並且此時您將使用非分頁池作爲套接字寫入花費的時間越來越長(詳情請參閱here)。因此,決定每個連接允許的優秀套接字寫入數量,並在達到該數字時限制讀取次數,即從讀取完成時的讀取切換到寫入完成時的讀取次數...
請注意,並不像使用TransmitFile()
本身那樣有效,因爲它避免了發生內核到用戶轉換以通知讀取完成併發出寫入調用。
回答問題的第一部分,如果您嘗試,會發生什麼情況?
相關問題
- 1. 的TransmitFile不工作
- 2. 的TransmitFile和WriteFile不要工作
- 3. 想知道ssl是否在magento工作
- 4. 檢查Ansible管道是否啓用/正常工作
- 5. QR代碼,不知道他們是否在黑莓上工作
- 6. Django事務管理是否在update()上工作?
- 7. 是否有JGit管道API?
- 8. Azcopy是否支持管道?
- 9. 貨幣管道不工作?
- 10. 的gtkmm +管道()不工作
- 11. 管道多個jenkins工作
- 12. Sitecore工作流和管道
- 13. sklearn管道不工作
- 14. Gstreamer taginject管道不工作
- 15. Shell管道異步工作
- 16. 工作流程與管道
- 17. 多管道不工作
- 18. MVC管道如何工作?
- 19. 我如何知道IIS是否工作?
- 20. 如何知道Crontab是否工作?
- 21. createReadStream管道不工作在電子1.6
- 22. 管道命令不工作在Windows中
- 23. 管道在執行minishell時不工作
- 24. redis管道在pyredis中如何工作?
- 25. 在管道中的@Component不工作angular2
- 26. 我是否可以在GAE管道API工作人員中保持狀態?
- 27. API是否執行管理工作?
- 28. 角4管單元測試不是基本的管道工作
- 29. UIGestureRecognizer是否在UIWebView上工作?
- 30. apollo-client是否在node.js上工作?