Как использовать BufferList с SocketAsyncEventArgs и не получить SocketError InvalidArgument?

Я могу использовать SetBuffer с SocketAsyncEventArgs просто отлично.

Если я попытаюсь использовать BufferList (после выполнения SetBuffer (null, 0, 0 )), я всегда и немедленно получаю SocketError InvalidArgument (10022 )при выполнении SendAsync на сокете.

НЕТ примеров или документации о том, как использовать 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);
}
7
задан meagar 15 July 2014 в 04:46
поделиться