Skip to content

Instantly share code, notes, and snippets.

Created July 30, 2017 13:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/147d4fb8fc541f0c352db8ff819a1e71 to your computer and use it in GitHub Desktop.
Save anonymous/147d4fb8fc541f0c352db8ff819a1e71 to your computer and use it in GitHub Desktop.
Send and Receive using SocketAsyncEventArgs
private void StartSend(SocketAsyncEventArgs sendReceiveEventArgs)
{
byte[] msgToSend = (byte[])sendReceiveEventArgs.UserToken;
// If the number of bytes to send is larger than the buffer we need more than one operation
if (msgToSend.Length <= SocketSettings.BufferSizeEach)
{
sendReceiveEventArgs.SetBuffer(msgToSend, 0, msgToSend.Length);
}
else
{
// Handle exception here for larger than buffer size instead of throwing an exception!
throw new Exception("Handle case for larger than buffer size here!");
}
bool willRaiseEvent = sendReceiveEventArgs.AcceptSocket.SendAsync(sendReceiveEventArgs);
// This will automatically call the IO_Completed process (ProcessSend) after completion.
}
private void ProcessSend(SocketAsyncEventArgs sendReceiveEventArgs)
{
if (sendReceiveEventArgs.SocketError == SocketError.Success)
{
StartReceive(sendReceiveEventArgs);
}
else
{
CloseClientSocket(sendReceiveEventArgs);
}
}
private void StartReceive(SocketAsyncEventArgs sendReceiveEventArgs)
{
bool willRaiseEvent = sendReceiveEventArgs.AcceptSocket.ReceiveAsync(sendReceiveEventArgs);
}
private void ProcessReceive(SocketAsyncEventArgs sendReceiveEventArgs)
{
if (sendReceiveEventArgs.SocketError != SocketError.Success)
{
CloseClientSocket(sendReceiveEventArgs);
}
else
{
if (sendReceiveEventArgs.BytesTransferred == 0)
{
CloseClientSocket(sendReceiveEventArgs);
}
else
{
byte[] msg = sendReceiveEventArgs.Buffer;
byte[] response = MessageManager.ProcessReceivedMessage(msg);
if (response != null)
{
sendReceiveEventArgs.UserToken = response;
StartSend(sendReceiveEventArgs);
}
StartReceive(sendReceiveEventArgs);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment