在Mono 3.12上,我使用Socket.SendAsync(SocketAsyncEventArgs)
和TCP流Socket
來實現基於請求的流式協議。我使用SocketAsyncEventArgs.BufferList
來設置多個數據緩衝區。完成TCP Socket SendAsync操作而不傳輸BufferList中的所有字節?
在爲Socket
和SocketAsyncEventArgs
的文檔,我無法找到的是否爲SocketAsyncEventArgs.Completed
,而不當使用BufferList
發送的所有字節,使我們必須驗證對SocketAsyncEventArgs.BytesTransferred
的印象中引發的任何提及。
在另一方面,Socket.BeginSend
使得這樣的保證
當應用程序調用
BeginSend
,該系統將使用 單獨的線程執行指定的回調方法,並將 塊EndSend
直到Socket
發送請求的字節數 或引發異常。
不規範作出關於使用SendAsync
與SocketAsyncEventArgs.BufferList
時傳輸的字節數是什麼保證?
假設事件已完成SocketError.Success
。
我想問題是:「SocketAsyncEventArgs.Completed'處理程序是否可以在沒有套接字錯誤和'e.BytesTransferred!= length'的情況下被調用?」從我可以在.NET框架下收集是不可能的:http://stackoverflow.com/questions/28675811/when-i-call-wsasend-will-all-the-data-be-sent和http:// stackoverflow .com/questions/14347708/calling-wsasend-in-completion-port – jorgebg
你能提供一些測試代碼嗎? –
@DieterMeemken你需要測試什麼來回答_規範做了什麼保證?正如我所提到的,我將'SendAsync'與'SocketAsyncEventArgs'一起使用並設置了一個'BufferList'。 –