Mam kod C# na Androida, który działa dobrze podczas korzystania ze wspólnego środowiska wykonawczego (Mono) lub łączenia zestawów Sdk, ale gdy oba są obecne, przestaje działać. Mogę budować bez łączenia, bez korzystania ze współdzielonego środowiska wykonawczego i działa to bezbłędnie, ale kiedy próbuję spakować do wdrożenia (łączenie Sdk i brak współdzielonego środowiska wykonawczego), otrzymuję SIGSEGV:
03-22 08:23:56.486 E/mono-rt ( 2526): Stacktrace:
03-22 08:23:56.486 E/mono-rt ( 2526):
03-22 08:23:56.496 E/mono-rt ( 2526): at <unknown> <0xffffffff>
03-22 08:23:56.496 E/mono-rt ( 2526): at (wrapper managed-to-native) System.Net.Sockets.Socket.SetSocketOption_internal (intptr,System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,object,byte[],int,int&) <IL 0x0002a, 0xffffffff>
03-22 08:23:56.496 E/mono-rt ( 2526): at System.Net.Sockets.Socket.SetSocketOption (System.Net.Sockets.SocketOptionLevel,System.Net.Sockets.SocketOptionName,object) <IL 0x000c2, 0x004cf>
03-22 08:23:56.496 E/mono-rt ( 2526): at Keiser.Plugin.Socket.NetSocket.CreateListeningSocket () [0x00041] in d:\Development\Keiser.MPM.Screen\Keiser.Plugin.Socket.Droid\NetSocket.cs:73
03-22 08:23:56.496 E/mono-rt ( 2526): at Keiser.Plugin.Socket.NetSocket.StartListener (System.AsyncCallback) [0x00012] in d:\Development\Keiser.MPM.Screen\Keiser.Plugin.Socket.Droid\NetSocket.cs:92
The program 'Mono' has exited with code 0 (0x0).
Ostatnia metoda w moim kodzie jest następująca:
protected virtual void CreateListeningSocket()
{
lock (Locker)
{
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, _port);
_socket.Bind(ipEndPoint);
_socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership, new MulticastOption(IPAddress.Parse(_ipAddress)));
_endPointSender = new IPEndPoint(IPAddress.Any, 0);
}
}
Czy jest jakiś sposób na rozwiązanie tego problemu? Próbowałem refaktoryzacji przy użyciu UDPClient, ale daje ten sam błąd w wierszu, w którym wywołuję JoinMulticastGroup w obiekcie UDPClient. Czy jest to błąd wewnątrz zespołu monodroidu?
** Uwaga: ten kod znajduje się we wtyczce MvvmCross, do której odwołuje się Core PCL dla projektu, który sam w sobie jest odniesieniem dla projektu Androida.