diff --git a/Emby.Common.Implementations/Net/SocketFactory.cs b/Emby.Common.Implementations/Net/SocketFactory.cs
index 1f41ffff5..70c7ba845 100644
--- a/Emby.Common.Implementations/Net/SocketFactory.cs
+++ b/Emby.Common.Implementations/Net/SocketFactory.cs
@@ -125,15 +125,15 @@ namespace Emby.Common.Implementations.Net
try
{
-#if NETSTANDARD1_3
- // The ExclusiveAddressUse socket option is a Windows-specific option that, when set to "true," tells Windows not to allow another socket to use the same local address as this socket
- // See https://github.com/dotnet/corefx/pull/11509 for more details
- if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows))
+#if NET46
+ retVal.ExclusiveAddressUse = false;
+#else
+ // The ExclusiveAddressUse socket option is a Windows-specific option that, when set to "true," tells Windows not to allow another socket to use the same local address as this socket
+ // See https://github.com/dotnet/corefx/pull/11509 for more details
+ if (System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(System.Runtime.InteropServices.OSPlatform.Windows))
{
retVal.ExclusiveAddressUse = false;
}
-#else
- retVal.ExclusiveAddressUse = false;
#endif
//retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, true);
retVal.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
diff --git a/Emby.Common.Implementations/Networking/NetworkManager.cs b/Emby.Common.Implementations/Networking/NetworkManager.cs
index a4e6d47d4..4485e8b14 100644
--- a/Emby.Common.Implementations/Networking/NetworkManager.cs
+++ b/Emby.Common.Implementations/Networking/NetworkManager.cs
@@ -245,7 +245,7 @@ namespace Emby.Common.Implementations.Networking
//}
return ipProperties.UnicastAddresses
- .Where(i => i.IsDnsEligible)
+ //.Where(i => i.IsDnsEligible)
.Select(i => i.Address)
.Where(i => i.AddressFamily == AddressFamily.InterNetwork)
.ToList();
diff --git a/Emby.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs b/Emby.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs
index 0a312f7b9..9823a2ff5 100644
--- a/Emby.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs
+++ b/Emby.Server.Implementations/HttpServer/SocketSharp/SharpWebSocket.cs
@@ -102,11 +102,7 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
/// Task.
public Task SendAsync(byte[] bytes, bool endOfMessage, CancellationToken cancellationToken)
{
- var completionSource = new TaskCompletionSource();
-
- WebSocket.SendAsync(bytes, res => completionSource.TrySetResult(true));
-
- return completionSource.Task;
+ return WebSocket.SendAsync(bytes);
}
///
@@ -118,11 +114,7 @@ namespace Emby.Server.Implementations.HttpServer.SocketSharp
/// Task.
public Task SendAsync(string text, bool endOfMessage, CancellationToken cancellationToken)
{
- var completionSource = new TaskCompletionSource();
-
- WebSocket.SendAsync(text, res => completionSource.TrySetResult(true));
-
- return completionSource.Task;
+ return WebSocket.SendAsync(text);
}
///
diff --git a/MediaBrowser.Api/BaseApiService.cs b/MediaBrowser.Api/BaseApiService.cs
index 7a8951396..07ec6d955 100644
--- a/MediaBrowser.Api/BaseApiService.cs
+++ b/MediaBrowser.Api/BaseApiService.cs
@@ -151,9 +151,10 @@ namespace MediaBrowser.Api
}
if (client.IndexOf("web", StringComparison.OrdinalIgnoreCase) == -1 &&
+
+ // covers both emby mobile and emby for android mobile
client.IndexOf("mobile", StringComparison.OrdinalIgnoreCase) == -1 &&
client.IndexOf("ios", StringComparison.OrdinalIgnoreCase) == -1 &&
- client.IndexOf("android", StringComparison.OrdinalIgnoreCase) == -1 &&
client.IndexOf("theater", StringComparison.OrdinalIgnoreCase) == -1)
{
options.Fields.Add(Model.Querying.ItemFields.ChildCount);
diff --git a/SocketHttpListener.Portable/WebSocket.cs b/SocketHttpListener.Portable/WebSocket.cs
index 889880387..9966d3fcf 100644
--- a/SocketHttpListener.Portable/WebSocket.cs
+++ b/SocketHttpListener.Portable/WebSocket.cs
@@ -5,6 +5,7 @@ using System.IO;
using System.Net;
using System.Text;
using System.Threading;
+using System.Threading.Tasks;
using MediaBrowser.Model.Cryptography;
using MediaBrowser.Model.IO;
using SocketHttpListener.Net.WebSockets;
@@ -621,26 +622,22 @@ namespace SocketHttpListener
}
}
- private void sendAsync(Opcode opcode, Stream stream, Action completed)
+ private Task sendAsync(Opcode opcode, Stream stream)
{
- Func sender = send;
- sender.BeginInvoke(
- opcode,
- stream,
- ar =>
- {
- try
- {
- var sent = sender.EndInvoke(ar);
- if (completed != null)
- completed(sent);
- }
- catch (Exception ex)
- {
- error("An exception has occurred while callback.", ex);
- }
- },
- null);
+ var completionSource = new TaskCompletionSource();
+ Task.Run(() =>
+ {
+ try
+ {
+ send(opcode, stream);
+ completionSource.TrySetResult(true);
+ }
+ catch (Exception ex)
+ {
+ completionSource.TrySetException(ex);
+ }
+ });
+ return completionSource.Task;
}
// As server
@@ -833,22 +830,18 @@ namespace SocketHttpListener
///
/// An array of that represents the binary data to send.
///
- ///
/// An Action<bool> delegate that references the method(s) called when the send is
/// complete. A passed to this delegate is true if the send is
/// complete successfully; otherwise, false.
- ///
- public void SendAsync(byte[] data, Action completed)
+ public Task SendAsync(byte[] data)
{
var msg = _readyState.CheckIfOpen() ?? data.CheckIfValidSendData();
if (msg != null)
{
- error(msg);
-
- return;
+ throw new Exception(msg);
}
- sendAsync(Opcode.Binary, _memoryStreamFactory.CreateNew(data), completed);
+ return sendAsync(Opcode.Binary, _memoryStreamFactory.CreateNew(data));
}
///
@@ -860,22 +853,18 @@ namespace SocketHttpListener
///
/// A that represents the text data to send.
///
- ///
/// An Action<bool> delegate that references the method(s) called when the send is
/// complete. A passed to this delegate is true if the send is
/// complete successfully; otherwise, false.
- ///
- public void SendAsync(string data, Action completed)
+ public Task SendAsync(string data)
{
var msg = _readyState.CheckIfOpen() ?? data.CheckIfValidSendData();
if (msg != null)
{
- error(msg);
-
- return;
+ throw new Exception(msg);
}
- sendAsync(Opcode.Text, _memoryStreamFactory.CreateNew(Encoding.UTF8.GetBytes(data)), completed);
+ return sendAsync(Opcode.Text, _memoryStreamFactory.CreateNew(Encoding.UTF8.GetBytes(data)));
}
#endregion
diff --git a/src/Emby.Server/Program.cs b/src/Emby.Server/Program.cs
index 24e391c73..26141a0ce 100644
--- a/src/Emby.Server/Program.cs
+++ b/src/Emby.Server/Program.cs
@@ -215,9 +215,12 @@ namespace Emby.Server
var initProgress = new Progress();
- // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes
- SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT |
- ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX);
+ if (environmentInfo.OperatingSystem == MediaBrowser.Model.System.OperatingSystem.Windows)
+ {
+ // Not crazy about this but it's the only way to suppress ffmpeg crash dialog boxes
+ SetErrorMode(ErrorModes.SEM_FAILCRITICALERRORS | ErrorModes.SEM_NOALIGNMENTFAULTEXCEPT |
+ ErrorModes.SEM_NOGPFAULTERRORBOX | ErrorModes.SEM_NOOPENFILEERRORBOX);
+ }
var task = _appHost.Init(initProgress);
Task.WaitAll(task);