public override void Bind(Uri uri) { TcpListener tcpListener = new TcpListener(Options); tcpListener.SetAddress(uri); LaunchChild(tcpListener); m_endpoints.Add(uri, tcpListener); }
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); } }
public override bool ValidateBindUri(Uri uri) { return uri.TryResolve(); }
public abstract bool ValidateBindUri(Uri uri);
public abstract void Bind(Uri uri);