在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'。 –