2 // This file is part of the LWES .NET Binding (LWES.net)
4 // COPYRIGHT© 2009, Phillip Clark (phillip[at*flitbit[dot*org)
5 // original .NET implementation
7 // LWES.net is free software: you can redistribute it and/or modify
8 // it under the terms of the Lesser GNU General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
12 // LWES.net is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // Lesser GNU General Public License for more details.
17 // You should have received a copy of the Lesser GNU General Public License
18 // along with LWES.net. If not, see <http://www.gnu.org/licenses/>.
20 namespace Org
.Lwes
.Listener
24 using System
.Net
.Sockets
;
27 using Org
.Lwes
.Properties
;
30 /// Implementation of the IEventListener for listening to multicast events.
32 public sealed class MulticastEventListener
: EventListenerBase
37 /// Initializes the instance.
39 /// <param name="db"></param>
40 /// <param name="multicastAddress"></param>
41 /// <param name="multicastPort"></param>
42 /// <param name="parallel"></param>
43 /// <param name="garbageHandling"></param>
44 public void InitializeAll(IEventTemplateDB db
45 , IPAddress multicastAddress
48 , ListenerGarbageHandling garbageHandling
)
51 Address
= multicastAddress
;
53 IsParallel
= parallel
;
58 /// Initializes the listener on a multicast address.
60 protected override void PerformInitialization()
62 base.FinishInitialize(new IPEndPoint(Address
, Port
),
65 s
.SetSocketOption(SocketOptionLevel
.Udp
, SocketOptionName
.NoDelay
, 1);
66 s
.SetSocketOption(SocketOptionLevel
.Socket
, SocketOptionName
.ReuseAddress
, 1);
67 if (e
.AddressFamily
== AddressFamily
.InterNetworkV6
)
69 s
.Bind(new IPEndPoint(IPAddress
.IPv6Any
, e
.Port
));
70 s
.SetSocketOption(SocketOptionLevel
.IPv6
, SocketOptionName
.AddMembership
,
71 new IPv6MulticastOption(e
.Address
));
75 s
.Bind(new IPEndPoint(IPAddress
.Any
, e
.Port
));
76 s
.SetSocketOption(SocketOptionLevel
.IP
, SocketOptionName
.AddMembership
,
77 new MulticastOption(e
.Address
));