說我發佈以下WSASend調用(窗口I/O完成端口沒有回調函數):帶有多個緩衝區的WSASend()可能完成不完整?
void send_data()
{
WSABUF wsaBuff[2];
wsaBuff[0].len = 20;
wsaBuff[1].len = 25;
WSASend(sock, &wsaBuff[0], 2, ......);
}
當我從完成端口的「write_done」通知,是有可能,wsaBuff [1]將被完全發送(25字節),但wsaBuff [0]將只被部分發送(比如說7個字節)?
你確定Len嗎?請注意這個特定的問題 - 這是一個單獨的WSASend()調用,而不是幾個,因此我期望它將WSABUF數組視爲一個單獨的,連續的緩衝區......這就是我的問題。 – Poni 2010-06-17 11:01:15
如果您已將套接字的發送緩衝區大小設置爲零,則您的緩衝區將被鎖定在內存中,並且如果超出鎖定的頁面限制,可能會導致ENOBUFS返回,同樣,我們都不知道確切的非分頁池用法這個情況。事實上,你使用分散/收集I/O不是,恕我直言,實際上是相關的。因爲到WSASend()的文檔並沒有說這種情況不會導致你所問的錯誤,你必須假設它可能發生,因此,恕我直言,我的答案的立場。 – 2010-06-19 09:44:10