同一插座上後許多wsasend(的問題是從MSDN論壇複製)從多個線程
MSDN這樣說:
如果您正在使用I/O完成端口,要知道,對WSASend的調用順序也是填充緩衝區爲 的順序。 WSASend不應該從不同線程同時調用同一套接口 ,因爲它可能導致 不可預知的緩衝區順序。
好的...但是如果我不在乎這個順序,也不關心順序,我會在另一邊接收它...我可以使用它嗎?從多個線程調用WSASend是否安全?那麼這些軟件包是如何傳遞的(也許訂購的方式不同,但完整)?
E.g. - >我會在一次呼叫中發送[12a],[34b],[11c]和[223d] ...([]標記我傳給WSASend的單元) 34b,11c,12a,223d?或者它會崩潰?或者我可以收到類似2a,34b,7a,5c,...
這樣的問題,也許問題應該是 - 它是原子嗎? (我正在談論WSASend與IOCP一起使用,因此重疊)
IIRC是的,你可以做到這一點。這樣的調用是線程安全的,但不是TCP安全的。) – 2014-09-25 20:06:33
想一想 - 通過WSARecv()調用相同的套接字並由兩個不同的線程池線程來處理兩個緩衝區是非同尋常的,但並非不可能。在處理完緩衝區數據之後,這些線程可能會發出WSASend調用來將回復同時發送到一個套接字。所以是的,他們必須是線程安全的。 – 2014-09-25 20:12:41
由於兩個線程池獲得完整的數據報需要回復的機會比TCP要高,因此我的場景更適合使用UDP協議。 – 2014-09-25 20:15:30