aboutsummaryrefslogtreecommitdiff
path: root/Emby.Common.Implementations/Net
diff options
context:
space:
mode:
authorLuke Pulverenti <luke.pulverenti@gmail.com>2017-03-26 15:54:50 -0400
committerLuke Pulverenti <luke.pulverenti@gmail.com>2017-03-26 15:54:50 -0400
commit8a68c2383866c7e0b21dc164f1126bd78699c1fb (patch)
tree9429c81b0ce7f3035a092f5c5e8a2f8c6964bc95 /Emby.Common.Implementations/Net
parent07c43a1cd3979e67ac3547f3a76a7daab5cd4bc7 (diff)
update socket send functions
Diffstat (limited to 'Emby.Common.Implementations/Net')
-rw-r--r--Emby.Common.Implementations/Net/UdpSocket.cs77
1 files changed, 65 insertions, 12 deletions
diff --git a/Emby.Common.Implementations/Net/UdpSocket.cs b/Emby.Common.Implementations/Net/UdpSocket.cs
index 94d073bd2..834f0a05c 100644
--- a/Emby.Common.Implementations/Net/UdpSocket.cs
+++ b/Emby.Common.Implementations/Net/UdpSocket.cs
@@ -145,31 +145,84 @@ namespace Emby.Common.Implementations.Net
if (buffer == null) throw new ArgumentNullException("messageData");
if (endPoint == null) throw new ArgumentNullException("endPoint");
- cancellationToken.ThrowIfCancellationRequested();
+ var ipEndPoint = NetworkManager.ToIPEndPoint(endPoint);
- var tcs = new TaskCompletionSource<int>();
+#if NETSTANDARD1_6
- cancellationToken.Register(() => tcs.TrySetCanceled());
+ if (size != buffer.Length)
+ {
+ byte[] copy = new byte[size];
+ Buffer.BlockCopy(buffer, 0, copy, 0, size);
+ buffer = copy;
+ }
- _sendSocketAsyncEventArgs.SetBuffer(buffer, 0, size);
- _sendSocketAsyncEventArgs.RemoteEndPoint = NetworkManager.ToIPEndPoint(endPoint);
- _currentSendTaskCompletionSource = tcs;
+ cancellationToken.ThrowIfCancellationRequested();
- var willRaiseEvent = _Socket.SendAsync(_sendSocketAsyncEventArgs);
+ _Socket.SendTo(buffer, ipEndPoint);
+ return Task.FromResult(true);
+#else
+ var taskSource = new TaskCompletionSource<bool>();
- if (!willRaiseEvent)
+ try
+ {
+ _Socket.BeginSendTo(buffer, 0, size, SocketFlags.None, ipEndPoint, result =>
+ {
+ if (cancellationToken.IsCancellationRequested)
+ {
+ taskSource.TrySetCanceled();
+ return;
+ }
+ try
+ {
+ _Socket.EndSend(result);
+ taskSource.TrySetResult(true);
+ }
+ catch (Exception ex)
+ {
+ taskSource.TrySetException(ex);
+ }
+
+ }, null);
+ }
+ catch (Exception ex)
{
- _sendSocketAsyncEventArgs_Completed(this, _sendSocketAsyncEventArgs);
+ taskSource.TrySetException(ex);
}
- return tcs.Task;
+ //_Socket.SendTo(messageData, new System.Net.IPEndPoint(IPAddress.Parse(RemoteEndPoint.IPAddress), RemoteEndPoint.Port));
+
+ return taskSource.Task;
+#endif
+ //ThrowIfDisposed();
+
+ //if (buffer == null) throw new ArgumentNullException("messageData");
+ //if (endPoint == null) throw new ArgumentNullException("endPoint");
+
+ //cancellationToken.ThrowIfCancellationRequested();
+
+ //var tcs = new TaskCompletionSource<int>();
+
+ //cancellationToken.Register(() => tcs.TrySetCanceled());
+
+ //_sendSocketAsyncEventArgs.SetBuffer(buffer, 0, size);
+ //_sendSocketAsyncEventArgs.RemoteEndPoint = NetworkManager.ToIPEndPoint(endPoint);
+ //_currentSendTaskCompletionSource = tcs;
+
+ //var willRaiseEvent = _Socket.SendAsync(_sendSocketAsyncEventArgs);
+
+ //if (!willRaiseEvent)
+ //{
+ // _sendSocketAsyncEventArgs_Completed(this, _sendSocketAsyncEventArgs);
+ //}
+
+ //return tcs.Task;
}
public async Task SendWithLockAsync(byte[] buffer, int size, IpEndPointInfo endPoint, CancellationToken cancellationToken)
{
ThrowIfDisposed();
- await _sendLock.WaitAsync(cancellationToken).ConfigureAwait(false);
+ //await _sendLock.WaitAsync(cancellationToken).ConfigureAwait(false);
try
{
@@ -177,7 +230,7 @@ namespace Emby.Common.Implementations.Net
}
finally
{
- _sendLock.Release();
+ //_sendLock.Release();
}
}