https://github.com/gravity00/sockettplextensions
Socket extensions for using Task Parallel Library (TPL)
https://github.com/gravity00/sockettplextensions
Last synced: about 1 year ago
JSON representation
Socket extensions for using Task Parallel Library (TPL)
- Host: GitHub
- URL: https://github.com/gravity00/sockettplextensions
- Owner: gravity00
- License: mit
- Created: 2019-06-17T09:01:07.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2019-07-01T09:38:57.000Z (almost 7 years ago)
- Last Synced: 2025-03-10T15:16:03.665Z (over 1 year ago)
- Language: C#
- Size: 89.8 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SocketTplExtensions
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).
## Installation
This library can be installed via [NuGet](https://www.nuget.org/packages/SocketTplExtensions/) package. Just run the following command:
```powershell
Install-Package SocketTplExtensions
```
## Compatibility
This library is compatible with the folowing frameworks:
* .NET Framework 4.0
* .NET Framework 4.5
* .NET Standard 1.3
* .NET Standard 2.0
## Extensions
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;
## Usage
```csharp
using (var socket = new Socket(SocketType.Stream, ProtocolType.Tcp))
{
await socket.ConnectAsync("127.0.0.1", 12345);
await socket.SendMessageAsync("Hello world!", 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("", StringComparison.OrdinalIgnoreCase) > -1)
break;
}
await socket.DisconnectAsync(false);
}
```