private bool TryToConnectSocket()

in src/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs [181:241]


		private bool TryToConnectSocket(string targetHost, int targetPort)
		{
			bool hasSucceeded = false;

			try
			{
				multicastSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
				endPoint = new IPEndPoint(IPAddress.Any, targetPort);

				// We have to allow reuse in the multicast socket. Otherwise, we would be unable to
                // use multiple clients on the same machine.
				multicastSocket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, 1);
				multicastSocket.Bind(endPoint);

				IPAddress ipaddress;

				if(!TcpTransportFactory.TryParseIPAddress(targetHost, out ipaddress))
				{
					ipaddress = TcpTransportFactory.GetIPAddress(targetHost, AddressFamily.InterNetwork);
					if(null == ipaddress)
					{
						throw new NMSConnectionException("Invalid host address.");
					}
				}

                if (LoopBackMode)
                {
                    multicastSocket.MulticastLoopback = true;
                }
                if (TimeToLive != 0)
                {
				    multicastSocket.SetSocketOption(SocketOptionLevel.IP, 
                                                    SocketOptionName.MulticastTimeToLive, timeToLive);
                }
                if (!String.IsNullOrEmpty(mcJoinNetworkInterface))
                {
                    // TODO figure out how to set this.
                    throw new NotSupportedException("McJoinNetworkInterface not yet implemented.");
                }
                else 
                {
                    multicastSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.AddMembership,
                                                     new MulticastOption(ipaddress, IPAddress.Any));
                }

                if (!String.IsNullOrEmpty(mcNetworkInterface))
                {
                    // TODO figure out how to set this.
                    throw new NotSupportedException("McNetworkInterface not yet implemented.");
                }

				multicastSocket.ReceiveTimeout = (int)keepAliveInterval;

				hasSucceeded = true;
			}
			catch(SocketException)
			{
			}

			return hasSucceeded;
		}