私はSocketAsyncEventArgsでSetBufferをうまく使うことができます。
(SetBuffer(null、0、0)を実行した後)BufferListを使用しようとすると、ソケットでSendAsyncを実行すると、常にすぐにSocketError InvalidArgument(10022)が発生します。
BufferListの使用方法に関する例やドキュメントはなく、私が行っていることは(とにかく私には)理にかなっています。
誰かがサンプルプログラムやコードスニペットを指摘できますか?
私はこれで髪を引き裂いていて、あまり残っていません...
これが基本的に私が行っていることです(eはSocketAsyncEventArgsであり、lSocketはSetBufferに使用するのと同じソケットです)
// null the buffer since we will use a buffer list
e.SetBuffer(null, 0, 0);
// create a bufferlist
e.BufferList = new List<ArraySegment<byte>>();
// create the bufferlist with the network header and the response bytes
e.BufferList.Add(new ArraySegment<byte>(lTxBytes)); // add the 4 character total length
e.BufferList.Add(new ArraySegment<byte>(Encoding.ASCII.GetBytes(lTx.Identity))); // echo back the incoming sequence number
e.BufferList.Add(new ArraySegment<byte>(Encoding.ASCII.GetBytes(lResponse)));
// *** the SendAsync always completes IMMEDIATELY (returns false) gets SocketError InvalidArgument (10022)
if (lSocket.SendAsync(e) == false)
{
// data was already sent back to the client.
AppSupport.WriteLog(LogLevel.Flow, "ProcessReceive had SendAsync complete synchronously (bytes transferred {0}).", e.BytesTransferred);
ProcessSend(e);
}