因爲我不是英語母語的人,所以我可能會錯過一些東西,所以也許這裏有人比我更瞭解我。IOCP文檔解釋問題 - 緩衝區所有權模糊
在MSDN從WSASend的doumentation摘自:
lpBuffers [IN]
一個指向WSABUF 結構的陣列。每個WSABUF結構 包含指向緩衝區的指針和緩衝區的長度(以字節爲單位)。對於 Winsock應用程序,一旦WSASend 函數被調用,系統擁有 這些緩衝區和應用程序可能 不訪問它們。該數組必須 在 發送操作期間保持有效。
好的,你能看到粗體文字嗎?這是不明確的地方!
我能想到的兩個譯本的這一行(可能是別的東西,你的名字):
翻譯1 - 「緩衝區」是指重疊結構我打電話時,通過這個功能。只有在得到關於它的完成通知時,我纔可以再次使用該對象。
翻譯2 - 「buffers」指的是實際的緩衝區,那些數據與我正在發送。如果WSABUF對象指向一個緩衝區,那麼在操作完成之前我無法觸摸此緩衝區。
任何人都可以告訴什麼是正確的解釋,該行?
而.....如果答案是第二個 - 你將如何解決它?
因爲對我來說,這意味着對於我發送的每個數據/緩衝區,我都必須在發送端保留一份它的副本 - 因此在高流量應用程序上有許多「未決」緩衝區(大小不同),它們真的會傷害「可擴展性」。
聲明1:
除了上面的段落(「And ....」),我還以爲IOCP將要發送的數據複製到它自己的緩衝區並從那裏發送,除非您設置SO_SNDBUF歸零。
聲明2:
我用堆棧分配的緩衝區(你知道,在函數體像char cBuff[1024];
- 如果翻譯的主要問題是第二個選項(即緩衝區必須保持原樣,直到發送是完成),然後......真的把事情搞得一團糟......你能想出解決它的辦法嗎?(我知道,我用上面的話來問)
非常感謝你的回覆萊恩,得到它從你意味着很多給我!我得到的總體思路,但我不能回到具體問題,在http://stackoverflow.com/questions/3034047/limiting-tcp-sends-with-a-to-be-sent-queue-和其他設計問題。 – Poni 2010-06-13 21:45:14
標記爲答案,因爲您的答案是一天結束時的答案。再次感謝你! – Poni 2010-06-13 21:45:45