Beispiel #1
0
        public override void Bind(Uri uri)
        {
            TcpListener tcpListener = new TcpListener(Options);
            tcpListener.SetAddress(uri);

            LaunchChild(tcpListener);
            m_endpoints.Add(uri, tcpListener);
        }
Beispiel #2
0
        public void SetAddress(Uri uri)
        {
            IPAddress ipAddress;

            if (uri.Host == "*")
                ipAddress = IPAddress.IPv6Any;
            else if (!IPAddress.TryParse(uri.Host, out ipAddress))
            {
                var availableAddresses = Dns.GetHostEntry(uri.Host).AddressList;

                // higher priority to IPv6
                ipAddress = availableAddresses.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetworkV6);

                if (ipAddress == null)
                    ipAddress = availableAddresses.FirstOrDefault(a => a.AddressFamily == AddressFamily.InterNetwork);

                if (ipAddress == null)
                    throw new NetMQException(ErrorCode.Invalid, string.Format("unable to find an IP address for {0}", uri.Host));
            }

            m_endPoint = new IPEndPoint(ipAddress, uri.Port);

            try
            {
                m_handle = AsyncSocket.Create(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);

                if (ipAddress.AddressFamily == AddressFamily.InterNetworkV6)
                {
                    try
                    {
                        // This is not supported on old windows operation system and might throw exception
                        m_handle.SetSocketOption(SocketOptionLevel.IPv6, IPv6Only, 0);
                    }
                    catch
                    {

                    }
                }

                m_handle.Bind(m_endPoint);
                m_handle.Listen(Options.Backlog);
            }
            catch (SocketException ex)
            {
                if (m_handle != null)
                {
                    m_handle.Dispose();
                    m_handle = null;
                }

                throw NetMQException.FromSocketError(ex.SocketErrorCode);
            }
        }
Beispiel #3
0
 public override bool ValidateBindUri(Uri uri)
 {
     return uri.TryResolve();
 }
Beispiel #4
0
 public abstract bool ValidateBindUri(Uri uri);
Beispiel #5
0
 public abstract void Bind(Uri uri);