Extensions methods for Socket
instances, making it easier to integrate with Task Parallel Library (TPL). It converts all available BeginX
and EndX
methods into XAsync
overloads, covering some missing from .NET Standard, but specially useful in older versions of the framework were none where provided (ex: .NET 4.0).
This library can be installed via NuGet package. Just run the following command:
Install-Package SocketTplExtensions
This library is compatible with the folowing frameworks:
- .NET Framework 4.0
- .NET Framework 4.5
- .NET Standard 1.3
- .NET Standard 2.0
List of extension methods provided:
Method | .NET 4.0 | .NET 4.5 | .NET Standard 1.3 | .NET Standard 2.0 |
---|---|---|---|---|
AcceptAsync() | A | A | F | F |
ConnectAsync(host, port) | A | A | F | F |
ConnectAsync(address, port) | A | A | F | F |
ConnectAsync(addresses, port) | A | A | F | F |
ConnectAsync(endpoint) | A | A | F | F |
DisconnectAsync(reuseSocket) | A | A | NS | A |
ReceiveAsync(buffer, offset, size, socketFlags) | A | A | A | A |
ReceiveAsync(buffers, socketFlags) | A | A | F | F |
SendAsync(buffer, offset, size, socketFlags) | A | A | A | A |
SendAsync(buffers, socketFlags) | A | A | F | F |
SendFileAsync(filename) | A | A | NS | A |
SendMessageAsync(message, encoding, socketFlags) | A | A | A | A |
SendMessageAsync(message, encoding, buffer, bufferIndex, socketFlags) | A | A | A | A |
SendMessageAsync(chars, index, count, encoding, socketFlags) | A | A | A | A |
SendMessageAsync(chars, index, count, encoding, buffer, bufferIndex, socketFlags) | A | A | A | A |
SendToAsync(buffer, offset, size, socketFlags, endpoint) | A | A | A | A |
Legend:
- A - available;
- F - provided by the framework;
- NS - not supported;
using (var socket = new Socket(SocketType.Stream, ProtocolType.Tcp))
{
await socket.ConnectAsync("127.0.0.1", 12345);
await socket.SendMessageAsync("Hello world!<EOF>", Encoding.ASCII, SocketFlags.None);
var responseBuffer = new byte[1024];
var responseBuilder = new StringBuilder();
while(true)
{
var receivedBytes = await socket.ReceiveAsync(responseBuffer, 0, responseBuffer.Length, SocketFlags.None);
if (receivedBytes == 0)
continue;
var response = Encoding.ASCII.GetString(responseBuffer, 0, receivedBytes);
sb.Append(response);
if (response.IndexOf("<EOF>", StringComparison.OrdinalIgnoreCase) > -1)
break;
}
await socket.DisconnectAsync(false);
}