public TcpClientSinkProvider(TcpConnectionPool pool, int timeout) { this.pool = pool; this.timeout = timeout; sinkCache = new Dictionary<TcpConnection, TcpClientSink>(); }
private void Init(IClientChannelSinkProvider clientSinkProvider, IServerChannelSinkProvider serverSinkProvider) { pool = new TcpConnectionPool(); if(clientSinkProvider == null) { this.clientSinkProvider = new BinaryClientFormatterSinkProvider(); this.clientSinkProvider.Next = new TcpClientSinkProvider(pool, timeout); } else { this.clientSinkProvider = clientSinkProvider; IClientChannelSinkProvider provider = clientSinkProvider; while(provider.Next != null) provider = provider.Next; provider.Next = new TcpClientSinkProvider(pool, timeout); } if(serverSinkProvider == null) serverSinkProvider = new BinaryServerFormatterSinkProvider(); try { if(host != null) { if(useIpAddress) host = Dns.GetHostName(); } else if(bindTo != IPAddress.Any) host = bindTo.ToString(); else { IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName()); if(addresses.Length == 0) throw new RemotingException("TCP error: IP address could not be determined for this host!"); host = addresses[0].ToString(); } } catch(SocketException e) { throw new RemotingException("TCP error: DNS error!", e); } channelData = new ChannelDataStore(new string[] { "tcp://" + TcpConnection.ThisMachineID }); for(IServerChannelSinkProvider provider = serverSinkProvider; provider != null; provider = provider.Next) provider.GetChannelData(channelData); IServerChannelSink chain = ChannelServices.CreateServerChannelSinkChain(serverSinkProvider, this); serverSink = new TcpServerSink(chain); StartListening(null); }
public TcpConnection(TcpConnectionPool pool, Socket socket) { this.pool = pool; this.socket = socket; socket.NoDelay = true; connId = nextId++; networkStream = new NetworkStream(socket, true); reader = new BinaryReader(networkStream); writer = new BinaryWriter(new BufferedOutputStream(networkStream, DefaultBufferSize)); }